Subversion Repositories NedoOS

Rev

Rev 1952 | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
1952 alone 1
        DEVICE ZXSPECTRUM128
2
        include "../_sdk/sys_h.asm"
3
 
4
INTSTACK=0x3800
5
 
6
        org PROGSTART
7
begin
8
        ;ld ix,(1<<9)+(2<<5)+12
9
        ;ld hl,(7<<11)+(34<<5)+(23/2) ;ix=date, hl=time
10
        ;OS_SETTIME
11
 
12
        ;ld e,6 ;textmode
13
        ;OS_SETGFX
14
        call initstdio
1953 alone 15
 
16
        ld a,0x01 ;ld bc
17
        ld (callcommand),a
1952 alone 18
        ld hl,tfreetime
19
        call prtext
1953 alone 20
        call looper
21
        call prdword_dehl
22
        call crlf
1952 alone 23
 
1953 alone 24
        ld a,0xcd ;call
25
        ld (callcommand),a
26
        ld hl,tfreetimeos
27
        call prtext
28
        call looper
29
        call prdword_dehl
30
        call crlf
31
 
32
        call swapimer
33
 
34
        call yieldgetkeyloop
35
 
36
        QUIT
37
 
38
looper        
1952 alone 39
        halt
40
        call swapimer
1953 alone 41
        ld hl,timeloop
42
        ld (on_int_q),hl
1952 alone 43
        ld de,0
44
        ld hl,timeloopq
1953 alone 45
        ld hx,8+1
1952 alone 46
        ds 0x200-1-$
47
        halt ;quit to timeloop
48
timeloop
49
        ld (on_int_q),hl
50
        ds 256-4-4
51
        inc de
52
        jp timeloop
53
timeloopq
1953 alone 54
        ld hl,(on_int_jp)
55
;d,e,l=NOPs
1952 alone 56
        ld h,e
57
        ld e,d
58
        ld d,0
59
;dehl=NOPs
1953 alone 60
        dup 3
61
        srl d
62
        rr e
63
        rr h
64
        rr l
65
        edup
66
        push de
67
        push hl
1952 alone 68
        call swapimer
1953 alone 69
        pop hl
70
        pop de
71
        ret
1952 alone 72
 
73
prtext
74
;hl=text
75
        push hl
76
        call strlen ;hl=length
77
        pop de ;de=text
78
        jp sendchars
79
 
80
strlen
81
;hl=str
82
;out: hl=length
83
        xor a
84
        ld b,a
85
        ld c,a ;чтобы точно найти терминатор
86
        cpir ;найдём обязательно, если длина=0, то bc=-1 и т.д.
87
        ld hl,-1
88
        or a
89
        sbc hl,bc
90
        ret
91
 
92
swapimer
93
        di
94
        ld de,0x0038
95
        ld hl,oldimer
96
        ld bc,3
97
swapimer0
98
        ld a,(de)
99
        ldi ;[oldimer] -> [0x0038]
100
        dec hl
101
        ld (hl),a ;[0x0038] -> [oldimer]
102
        inc hl
103
        jp pe,swapimer0
104
        ei
105
        ret
106
oldimer
107
        jp on_int ;заменится на код из 0x0038
108
        jp 0x0038+3
109
 
110
on_int
111
;restore stack with de
112
        EX DE,HL
113
        EX (SP),HL ;de="hl", в стеке "de"
114
        LD (on_int_jp),HL
115
        LD (on_int_sp),SP
116
        LD SP,INTSTACK
117
        push af
118
        push bc
119
        push de ;"hl"
120
        exx
121
        ex af,af' ;'
122
        push af
123
        push bc
124
        push de
125
        push hl
126
        push ix
127
        push iy
1953 alone 128
callcommand=$
1952 alone 129
        call oldimer ;ei ;а что если выйдем поздно (по yield)? надо в конце обработчика убрать ei, но и это не поможет, т.к. yield сейчас с включенными прерываниями!!!      
130
 
131
        pop iy
132
        pop ix
133
        pop hl
134
        pop de
135
        pop bc
136
        pop af
137
        ex af,af' ;'
138
        exx
139
        pop hl
140
        pop bc
141
        pop af        
142
on_int_sp=$+1
143
        ld sp,0
144
        pop de
145
        ei
1953 alone 146
        dec hx
1952 alone 147
on_int_jp=$+1
1953 alone 148
        jp nz,0;jp 0
1952 alone 149
on_int_q=$+1
150
        jp timeloop ;/timeloopq
151
 
1953 alone 152
crlf
153
        ld hl,2 ;hl=length
154
        ld de,tcrlf ;de=text
155
        jp sendchars
156
 
157
tcrlf
158
        db 13,10
1952 alone 159
tfreetime
160
        db "Free time with generic user INT handler (NOPs)=",0
1953 alone 161
tfreetimeos
162
        db "Free time with generic user INT handler (NOPs)=",0
1952 alone 163
 
164
        include "../_sdk/stdio.asm"
165
        include "../_sdk/prdword.asm"
166
end
167
        savebin "freetime.com",begin,end-begin
168
 
169
        LABELSLIST "../../us/user.l",1