Difference between revisions of "Light pen driver"
From CPCWiki - THE Amstrad CPC encyclopedia!
| Line 5: | Line 5: | ||
call 0bd19h ;; mc wait flyback | call 0bd19h ;; mc wait flyback | ||
di | di | ||
| − | ld bc,0f40eh | + | ld bc,0f40eh ;; we want to select AY register 14 |
out (c),c | out (c),c | ||
ld b,0f6h | ld b,0f6h | ||
| Line 11: | Line 11: | ||
and 030h | and 030h | ||
ld c,a | ld c,a | ||
| − | or 0c0h | + | or 0c0h ;; AY control select register. |
out (c),a | out (c),a | ||
| − | out (c),a ;; BUG | + | out (c),a ;; BUG. This should set AY control to 0 to also be compatible with Plus. |
inc b | inc b | ||
| − | ld a,092h | + | ld a,092h |
out (c),a | out (c),a | ||
push bc | push bc | ||
| − | ld bc,0f649h ;; select keyboard line 9 (joystick) | + | ld bc,0f649h ;; AY read from register and select keyboard line 9 (joystick) |
out (c),c | out (c),c | ||
out (c),c ;; BUG? No need to do this twice. | out (c),c ;; BUG? No need to do this twice. | ||
| Line 46: | Line 46: | ||
ld (0a410h),hl ;; detected 'position' or 'ffff' for not detected | ld (0a410h),hl ;; detected 'position' or 'ffff' for not detected | ||
pop bc | pop bc | ||
| + | ;; BUG: For compatibility with Plus this should set AY control to 0 via Port F6xx. | ||
ld a,082h | ld a,082h | ||
out (c),a | out (c),a | ||
| Line 150: | Line 151: | ||
call 0bd19h ;; mc wait flyback | call 0bd19h ;; mc wait flyback | ||
| − | ;; BUG? this is jumping back to the 0x0a in LD B,0ah | + | ;; BUG? this is jumping back to the 0x0a in LD B,0ah |
;; djnz $-4 | ;; djnz $-4 | ||
djnz l9d1e | djnz l9d1e | ||
| − | ld b,020h | + | ld b,020h ;; number of lines |
l9d65h: | l9d65h: | ||
push bc | push bc | ||
| − | call sub_9d35h | + | call sub_9d35h ;; draw lines |
call sub_9c40h ;;detect | call sub_9c40h ;;detect | ||
pop bc | pop bc | ||
| Line 181: | Line 182: | ||
ret | ret | ||
l9d91h: | l9d91h: | ||
| − | ld de,0ffech | + | ld de,0ffech ;; -20 |
ld hl,00000h | ld hl,00000h | ||
call 0bbc3h ;; gra move relative | call 0bbc3h ;; gra move relative | ||
| Line 187: | Line 188: | ||
ld a,000h | ld a,000h | ||
call 0bbdeh ;; gra set pen | call 0bbdeh ;; gra set pen | ||
| − | call sub_09d35h | + | call sub_09d35h ;; lines |
ld a,001h | ld a,001h | ||
call 0bbdeh ;; gra set pen | call 0bbdeh ;; gra set pen | ||
| − | ld de,0ffech | + | ld de,0ffech ;; -20 |
ld hl,00000h | ld hl,00000h | ||
call 0bbc3h ;; gra move relative | call 0bbc3h ;; gra move relative | ||
| Line 204: | Line 205: | ||
call 0bbf9h ;; gra line relative | call 0bbf9h ;; gra line relative | ||
ld de,(0a416h) | ld de,(0a416h) | ||
| − | ld hl,0ffech | + | ld hl,0ffech ;; -20 |
call 0bbc3h ;; gra move relative | call 0bbc3h ;; gra move relative | ||
pop bc | pop bc | ||
| Line 240: | Line 241: | ||
push hl | push hl | ||
push de | push de | ||
| − | call | + | call sub_09e08h |
ld (0a414h),hl | ld (0a414h),hl | ||
ld de,05398h | ld de,05398h | ||
| Line 306: | Line 307: | ||
sub_9e1fh: | sub_9e1fh: | ||
| − | call | + | call sub_9c8ah |
ld hl,(0a418h) | ld hl,(0a418h) | ||
ld (0a420h),hl | ld (0a420h),hl | ||
| Line 659: | Line 660: | ||
nop | nop | ||
nop | nop | ||
| + | sub_0a028h: | ||
ld a,013h | ld a,013h | ||
| − | ld ( | + | ld (0a124h),a |
ld a,00eh | ld a,00eh | ||
ld (0a0e2h),a | ld (0a0e2h),a | ||
| − | ld a,( | + | ld a,(0a133h) |
bit 1,a | bit 1,a | ||
jr z,la083h | jr z,la083h | ||
ld a,000h | ld a,000h | ||
| − | ld ( | + | ld (0a124h),a |
ld a,007h | ld a,007h | ||
ld (0a0e2h),a | ld (0a0e2h),a | ||
la083h: | la083h: | ||
call 0bd28h ;; mc reset printer | call 0bd28h ;; mc reset printer | ||
| + | |||
ld de,00000h | ld de,00000h | ||
ld hl,00000h | ld hl,00000h | ||
ld (0a12dh),de | ld (0a12dh),de | ||
| + | sub_a050h: | ||
ld a,000h | ld a,000h | ||
ld (0a12ch),a | ld (0a12ch),a | ||
| Line 704: | Line 708: | ||
ld a,000h | ld a,000h | ||
call 0bd2bh ;; mc print char | call 0bd2bh ;; mc print char | ||
| − | ld a,( | + | ld a,(0a133h) |
bit 0,a | bit 0,a | ||
| − | jr z, | + | jr z,la0b4h |
ld a,002h | ld a,002h | ||
call 0bd2bh ;; mc print char | call 0bd2bh ;; mc print char | ||
| Line 712: | Line 716: | ||
call 0bd2bh ;; mc print char | call 0bd2bh ;; mc print char | ||
jr la0f9h | jr la0f9h | ||
| − | + | la0b4h: | |
ld a,001h | ld a,001h | ||
call 0bd2bh ;; mc print char | call 0bd2bh ;; mc print char | ||
| Line 718: | Line 722: | ||
ld a,(0a12ch) | ld a,(0a12ch) | ||
call 0bd2bh ;; mc print char | call 0bd2bh ;; mc print char | ||
| − | |||
call sub_a115h | call sub_a115h | ||
inc hl | inc hl | ||
| Line 725: | Line 728: | ||
ld a,h | ld a,h | ||
cp 001h | cp 001h | ||
| − | jp nz, | + | jp nz,sub_a050h |
| − | + | ||
ld a,l | ld a,l | ||
cp 090h | cp 090h | ||
| − | jp nz, | + | jp nz,sub_a050h |
ld a,00ah | ld a,00ah | ||
| − | + | call 0bd2bh ;; mc print char | |
| − | call 0bd2bh | + | |
ld a,02fh | ld a,02fh | ||
call 0bb1eh ;; km test key | call 0bb1eh ;; km test key | ||
| − | |||
ret nz | ret nz | ||
ld hl,(0a12dh) | ld hl,(0a12dh) | ||
ld de,0000eh | ld de,0000eh | ||
| − | |||
add hl,de | add hl,de | ||
ld (0a12dh),hl | ld (0a12dh),hl | ||
| Line 746: | Line 745: | ||
ld de,(0a12dh) | ld de,(0a12dh) | ||
ld a,d | ld a,d | ||
| − | |||
cp 002h | cp 002h | ||
| − | jp nz, | + | jp nz,sub_a050h |
ld a,e | ld a,e | ||
cp 084h | cp 084h | ||
| − | jp nz, | + | jp nz,sub_a050h |
ret | ret | ||
| + | |||
| + | sub_a0ffh: | ||
ld b,a | ld b,a | ||
call 0bb99h ;; txt get paper | call 0bb99h ;; txt get paper | ||
| Line 761: | Line 761: | ||
ld (0a12ch),hl | ld (0a12ch),hl | ||
ret | ret | ||
| + | |||
| + | sub_a10dh: | ||
ld (0a12fh),hl | ld (0a12fh),hl | ||
ld (0a131h),de | ld (0a131h),de | ||
ret | ret | ||
| + | |||
| + | sub_a115h: | ||
ld hl,(0a12fh) | ld hl,(0a12fh) | ||
ld de,(0a131h) | ld de,(0a131h) | ||
ret | ret | ||
| + | |||
| + | sub_a11dh: | ||
call sub_a0ffh | call sub_a0ffh | ||
call sub_a115h | call sub_a115h | ||
| Line 774: | Line 780: | ||
call 0bbf0h ;; gra test absolute | call 0bbf0h ;; gra test absolute | ||
ret | ret | ||
| + | |||
| + | la10ch: | ||
nop | nop | ||
add a,h | add a,h | ||
| Line 804: | Line 812: | ||
nop | nop | ||
nop | nop | ||
| − | |||
nop | nop | ||
nop | nop | ||
| Line 814: | Line 821: | ||
nop | nop | ||
nop | nop | ||
| + | sub_a154h: | ||
call 0bc11h ;; scr get mode | call 0bc11h ;; scr get mode | ||
cp 000h | cp 000h | ||
| Line 831: | Line 839: | ||
ld (0a254h),a | ld (0a254h),a | ||
call 0bbc6h ;; gra ask cursor | call 0bbc6h ;; gra ask cursor | ||
| − | ld ( | + | ld (0a250h),hl |
| − | ld ( | + | ld (0a250h+2),de |
la1b7h: | la1b7h: | ||
call 0bb99h ;; txt get paper | call 0bb99h ;; txt get paper | ||
| − | ld ( | + | ld (0a1f9h),a |
ld bc,00000h | ld bc,00000h | ||
ld (0a24ch),bc | ld (0a24ch),bc | ||
ld (0a24eh),bc | ld (0a24eh),bc | ||
| − | call | + | call sub_a210 |
ld a,02fh | ld a,02fh | ||
call 0bb1eh ;; km test key | call 0bb1eh ;; km test key | ||
| Line 854: | Line 862: | ||
ld bc,05398h | ld bc,05398h | ||
add hl,bc | add hl,bc | ||
| − | ld ( | + | ld (0a1aah),hl |
ld de,(055e0h) | ld de,(055e0h) | ||
ld hl,(0a24eh) | ld hl,(0a24eh) | ||
| Line 860: | Line 868: | ||
ld bc,057e4h | ld bc,057e4h | ||
add hl,bc | add hl,bc | ||
| − | ld ( | + | ld (0a1b7h),hl |
ld hl,(05a2ch) | ld hl,(05a2ch) | ||
la1f9h: | la1f9h: | ||
| Line 891: | Line 899: | ||
ret z | ret z | ||
jp la18bh | jp la18bh | ||
| + | sub_a1efh: | ||
push de | push de | ||
push hl | push hl | ||
| Line 897: | Line 906: | ||
pop bc | pop bc | ||
pop hl | pop hl | ||
| − | |||
pop de | pop de | ||
cp 000h | cp 000h | ||
jr nz,la248h | jr nz,la248h | ||
| − | ld ( | + | ld (0a250h),hl |
| − | ld ( | + | ld (0a250h+2),de |
push bc | push bc | ||
| − | call | + | call sub_0a210h |
pop bc | pop bc | ||
la248h: | la248h: | ||
| − | ld hl,( | + | ld hl,(0a257h) |
ld de,(0a255h) | ld de,(0a255h) | ||
ret | ret | ||
| − | + | sub_a210: | |
| − | ld hl,( | + | ld hl,(0a250h) |
| − | ld de,( | + | ld de,(0a250h+2) |
| − | + | ||
call 0bbeah ;; gra plot absolute | call 0bbeah ;; gra plot absolute | ||
ld hl,(0a24ch) | ld hl,(0a24ch) | ||
| Line 926: | Line 933: | ||
ld bc,05398h | ld bc,05398h | ||
add hl,bc | add hl,bc | ||
| − | ld de,( | + | ld de,(0a250h+2) |
| − | ld ( | + | ld (0a237h),hl |
ld (05648h),de | ld (05648h),de | ||
ld hl,(0a24ch) | ld hl,(0a24ch) | ||
ld bc,057e4h | ld bc,057e4h | ||
add hl,bc | add hl,bc | ||
| − | ld de,( | + | ld de,(0a250h) |
| − | ld ( | + | ld (0a249),hl |
ld (05a94h),de | ld (05a94h),de | ||
ret | ret | ||
| + | la24ch: | ||
or b | or b | ||
ld (bc),a | ld (bc),a | ||
| Line 944: | Line 952: | ||
jr nz,la295h | jr nz,la295h | ||
inc b | inc b | ||
| − | |||
jr nz,$+3 | jr nz,$+3 | ||
cp h | cp h | ||
Revision as of 03:06, 13 July 2025
org 09c40h
sub_9c40h:
call 0bd19h ;; mc wait flyback
di
ld bc,0f40eh ;; we want to select AY register 14
out (c),c
ld b,0f6h
in a,(c)
and 030h
ld c,a
or 0c0h ;; AY control select register.
out (c),a
out (c),a ;; BUG. This should set AY control to 0 to also be compatible with Plus.
inc b
ld a,092h
out (c),a
push bc
ld bc,0f649h ;; AY read from register and select keyboard line 9 (joystick)
out (c),c
out (c),c ;; BUG? No need to do this twice.
ld b,0f4h
;; loop reading joystick until input seen or timeout
ld hl,0fa66h ;; timeout is 0-FA66 because it counts up from this starting point.
;; timeout is 59A loops.
l9c68:
in a,(c)
cp 0fdh ;; 11111101. Bits are '1' if 'no press', but '0' if pressed. checking joy 0 down.
jr z,l9c79
inc l
jr nz,l9c68
inc h
jr nz,l9c68
;; timeout. not detected
ld hl,0ffffh
jr l9cbdh
l9c79:
;; detected.
ld de,00420h
add hl,de
l9cbd:
ld (0a410h),hl ;; detected 'position' or 'ffff' for not detected
pop bc
;; BUG: For compatibility with Plus this should set AY control to 0 via Port F6xx.
ld a,082h
out (c),a
dec b
out (c),c
ei
ret
sub_9c8ah:
call sub_9da6h ;; screen to buffer
call sub_9ce4h
call sub_9db2h ;; buffer to screen
ret
sub_9c94:
ld a,h
ld c,l
ld b,010h
ld hl,00000h
l9cdbh:
rl c
rla
adc hl,hl
sbc hl,de
jr nc,l9ce5h
add hl,de
l9ce5h:
ccf
djnz l9cdbh
rl c
rla
ld h,a
ld l,c
ret
sub_9caeh:
ld a,l
ld c,h
ld b,010h
ld hl,00000h
l9cf5h:
srl c
rra
jr nc,l9cfbh
add hl,de
l9cfbh:
ex de,hl
add hl,hl
ex de,hl
djnz l9cf5h
ret
sub_9cc1h:
call sub_9c40h ;; detect
ld a,0ffh
cp h
ret z
;; detected.
ld de,00002h
call sub_9c94h
ld de,00064h
call sub_9caeh
ld de,00084h
call sub_9c94h
ex de,hl
ld hl,0018fh
sbc hl,de
ld (0a410h),hl
ret
sub_9ce4:
ld a,000h
ld bc,01a1ah
call 0bc32h ;; scr set ink
call 0bc14h ;; scr clear
ld a,001h
call 0bbdeh ;; gra set pen
call sub_9cc1h ;; get position
ld a,0ffh
cp h
ret z
ld de,0000ah
and a
sbc hl,de
;; BUG? This is jumping just after 0x021 of LD HL and then executing two nops before LD DE,0000h
;;jr nc,$+2
jr nc,l9d06
ld hl,00000h
l9d06:
ld de,00000h
call 0bbc0h ;; gra move absolute
ld a,001h
ld bc,01a1ah
call 0bc32h ;; scr set ink
ld a,000h
ld bc,00000h
call 0bc32h ;; scr set ink
ld b,00ah
l9d1e:
call 0bd19h ;; mc wait flyback
;; BUG? this is jumping back to the 0x0a in LD B,0ah
;; djnz $-4
djnz l9d1e
ld b,020h ;; number of lines
l9d65h:
push bc
call sub_9d35h ;; draw lines
call sub_9c40h ;;detect
pop bc
ld a,0ffh
cp h
jr nz,l9d91h
djnz l9d65h
ret
sub_9d35h:
ld bc,(0a418h)
l9d79h:
push bc
ld de,00000h
ld hl,00014h
call 0bbf9h ;; gra line relative
ld de,(0a416h)
ld hl,0ffech
call 0bbc3h ;; gra move relative
pop bc
djnz l9d79h
ret
l9d91h:
ld de,0ffech ;; -20
ld hl,00000h
call 0bbc3h ;; gra move relative
l9d9ah:
ld a,000h
call 0bbdeh ;; gra set pen
call sub_09d35h ;; lines
ld a,001h
call 0bbdeh ;; gra set pen
ld de,0ffech ;; -20
ld hl,00000h
call 0bbc3h ;; gra move relative
ld bc,(0a420h)
l9db4h:
push bc
call sub_9cc1h ;; get position
ld a,0ffh
cp h
jr nz,l9ddah
ld de,00000h
ld hl,00014h
call 0bbf9h ;; gra line relative
ld de,(0a416h)
ld hl,0ffech ;; -20
call 0bbc3h ;; gra move relative
pop bc
djnz l9db4h
ld hl,0ffffh
ld (0a410h),hl
ret
l9ddah:
pop bc
ld (0a410h),hl
call 0bbc6h ;; gra ask cursor
ld (0a412h),de
ret
;; screen to buffer
;; c000->5bfe length 3fd0
sub_9da6h:
ld bc,03fd0h
ld hl,0c000h
ld de,05bfeh
ldir
ret
;; buffer to screen
;; 5bfe->c000 length 3fd0
sub_9db2h:
ld bc,03fd0h
ld hl,05bfeh
ld de,0c000h
ldir
ret
sub_9dbeh:
push hl
push de
call sub_09e08h
ld (0a414h),hl
ld de,05398h
ld b,004h
l9e0bh:
push bc
ld hl,(0a414h)
ld c,b
ld b,000h
inc hl
and a
sbc hl,bc
ld b,00bh
l9e18h:
ld a,(hl)
ld (de),a
inc de
call 0bc29h ;; scr prev line
djnz l9e18h
pop bc
djnz l9e0bh
pop de
pop hl
ret
sub_9de6h:
push hl
push de
ld de,05398h
ld b,004h
l9e2dh:
push bc
ld hl,(0a414h)
ld c,b
ld b,000h
inc hl
and a
sbc hl,bc
ld b,00bh
l9e3ah:
ld a,(de)
ld (hl),a
inc de
call 0bc29h ;; scr prev line
djnz l9e3ah
pop bc
djnz l9e2dh
pop de
pop hl
ret
sub_9e08h:
push de
ld de,00002h
call sub_9c94h
pop de
push hl
ex de,hl
ld de,(0a416h)
call sub_9c94h
ex de,hl
pop hl
call 0bc1dh ;; scr dot position
ret
sub_9e1fh:
call sub_9c8ah
ld hl,(0a418h)
ld (0a420h),hl
ld hl,(0a410h)
ld a,0ffh
cp h
ret z
ld (0a41ch),hl
ld de,(0a412h)
ld (0a41ah),de
l9e7ah:
ld de,0000ah
and a
sbc hl,de
jr nc,l9e85h
ld hl,00000h
l9e85h:
push hl
ld hl,(0a412h)
add hl,de
ex de,hl
pop hl
call sub_09dbeh
call 0bbc0h ;; gra move absolute
call sub_09ed2h
call sub_09de6h
ld hl,(0a410h)
ld a,0ffh
cp h
jr nz,l9ea9h
ld a,02fh
call 0bb1eh ;; km test key
ret z
jp l9e52h
l9ea9h:
call sub_09eb7h
ld a,02fh
call 0bb1eh ;; km test key
ret z
ld hl,(0a41ch)
ld de,(0a41ah)
call 0bbc0h ;; gra move absolute
ld hl,(0a410h)
ld de,(0a412h)
ld a,(0a41eh)
call 0bbdeh ;; gra set pen
ld (0a41ch),hl
ld (0a41ah),de
call 0bbf6h ;; gra line absolute
ld hl,(0a410h)
jr l9e7ah
sub_09e98h:
ld de,0ffech
ld hl,00000h
call 0bbc3h ;; gra move relative
ld a,001h
call 0bbdeh ;; gra set pen
call sub_09d35h
ld a,000h
call 0bbdeh ;; gra set pen
call sub_9cc1h ;; get position
ld a,0ffh
cp h
ret nz
l9ef5h:
pop de
ret
ld hl,(0a41ah)
ld de,(0a412h)
l9efeh:
and a
sbc hl,de
ret z
jp p,09ecbh
ld hl,l9f15h
jp 09eceh
ld hl,09ed2h
l9f0eh:
ld (l9e52h+1),hl
ret
call sub_9e98h
l9f15h:
ld de,0ffech
ld hl,00000h
call 0bbc3h ;; gra move relative
ld bc,(0a420h)
l9f22h:
push bc
ld de,00000h
ld hl,00014h
call 0bbf9h ;; gra line relative
call sub_9cc1h
ld a,0ffh
cp h
jp nz,l9efeh
ld hl,(0a422h)
ld (0a410h),hl
jp l9d9ah
ld (0a422h),hl
ld de,(0a416h)
ld hl,0ffech
call 0bbc3h ;; gra move relative
pop bc
djnz l9f22h
ld hl,0ffffh
ld (0a410h),hl
ret
call sub_9e98h
ld bc,(0a420h)
l9f5ch:
push bc
ld de,00000h
ld hl,00014h
call 0bbf9h ;; gra line relative
call sub_9cc1h
ld a,0ffh
cp h
jp z,l9ef5h
ld (0a422h),hl
ld de,(0a416h)
ld hl,00000h
and a
sbc hl,de
push hl
pop de
ld hl,0ffech
call 0bbc3h ;; gra move relative
pop bc
djnz l9f5ch
ld hl,00000h
ld de,00014h
call 0bbc3h ;; gra move relative
jp l9f0eh
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
la050h:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
sub_0a028h:
ld a,013h
ld (0a124h),a
ld a,00eh
ld (0a0e2h),a
ld a,(0a133h)
bit 1,a
jr z,la083h
ld a,000h
ld (0a124h),a
ld a,007h
ld (0a0e2h),a
la083h:
call 0bd28h ;; mc reset printer
ld de,00000h
ld hl,00000h
ld (0a12dh),de
sub_a050h:
ld a,000h
ld (0a12ch),a
ld de,(0a12dh)
call sub_a10dh
call 0bbf0h ;; gra test absolute
ld de,00001h
call sub_a11dh
ld de,00002h
call sub_a11dh
ld de,00004h
call sub_a11dh
ld de,00008h
call sub_a11dh
ld de,00010h
call sub_a11dh
ld de,00020h
call sub_a11dh
ld de,00040h
call sub_a0ffh
la0c9h:
call 0bd2eh ;; mc busy printer
jr c,la0c9h
call 0bd28h ;; mc reset printer
ld a,01bh
call 0bd2bh ;; mc print char
ld a,04bh
call 0bd2bh ;; mc print char
ld a,000h
call 0bd2bh ;; mc print char
ld a,(0a133h)
bit 0,a
jr z,la0b4h
ld a,002h
call 0bd2bh ;; mc print char
ld a,(0a12ch)
call 0bd2bh ;; mc print char
jr la0f9h
la0b4h:
ld a,001h
call 0bd2bh ;; mc print char
la0f9h:
ld a,(0a12ch)
call 0bd2bh ;; mc print char
call sub_a115h
inc hl
inc hl
call sub_a10dh
ld a,h
cp 001h
jp nz,sub_a050h
ld a,l
cp 090h
jp nz,sub_a050h
ld a,00ah
call 0bd2bh ;; mc print char
ld a,02fh
call 0bb1eh ;; km test key
ret nz
ld hl,(0a12dh)
ld de,0000eh
add hl,de
ld (0a12dh),hl
ld hl,00000h
call sub_a10dh
ld de,(0a12dh)
ld a,d
cp 002h
jp nz,sub_a050h
ld a,e
cp 084h
jp nz,sub_a050h
ret
sub_a0ffh:
ld b,a
call 0bb99h ;; txt get paper
cp b
ret z
ld hl,(0a12ch)
add hl,de
ld (0a12ch),hl
ret
sub_a10dh:
ld (0a12fh),hl
ld (0a131h),de
ret
sub_a115h:
ld hl,(0a12fh)
ld de,(0a131h)
ret
sub_a11dh:
call sub_a0ffh
call sub_a115h
inc de
inc de
call sub_a10dh
call 0bbf0h ;; gra test absolute
ret
la10ch:
nop
add a,h
ld (bc),a
nop
nop
ld c,000h
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
sub_a154h:
call 0bc11h ;; scr get mode
cp 000h
jr nz,la19dh
ld b,004h
la19dh:
cp 001h
jr nz,la1a3h
ld b,002h
la1a3h:
cp 002h
jr nz,la1a9h
ld b,001h
la1a9h:
ld a,b
la1aah:
ld (0a254h),a
call 0bbc6h ;; gra ask cursor
ld (0a250h),hl
ld (0a250h+2),de
la1b7h:
call 0bb99h ;; txt get paper
ld (0a1f9h),a
ld bc,00000h
ld (0a24ch),bc
ld (0a24eh),bc
call sub_a210
ld a,02fh
call 0bb1eh ;; km test key
ret nz
ld hl,(0a24eh)
inc hl
inc hl
ld a,004h
cp h
jr nz,la1deh
ld hl,00000h
la1deh:
ld (0a24eh),hl
ld bc,05398h
add hl,bc
ld (0a1aah),hl
ld de,(055e0h)
ld hl,(0a24eh)
sub_a1efh:
ld bc,057e4h
add hl,bc
ld (0a1b7h),hl
ld hl,(05a2ch)
la1f9h:
ld (la257h),hl
ld (0a255h),de
ld bc,00000h
ld a,(0a254h)
ld c,a
ex de,hl
add hl,bc
ex de,hl
call sub_a1efh
and a
ex de,hl
sbc hl,bc
ex de,hl
call sub_a1efh
inc hl
inc hl
call sub_a1efh
dec hl
dec hl
call sub_a1efh
ld hl,(0a24eh)
ld de,(0a24ch)
inc hl
inc hl
and a
sbc hl,de
ret z
jp la18bh
sub_a1efh:
push de
push hl
push bc
call 0bbf0h ;; gra test absolute
pop bc
pop hl
pop de
cp 000h
jr nz,la248h
ld (0a250h),hl
ld (0a250h+2),de
push bc
call sub_0a210h
pop bc
la248h:
ld hl,(0a257h)
ld de,(0a255h)
ret
sub_a210:
ld hl,(0a250h)
ld de,(0a250h+2)
call 0bbeah ;; gra plot absolute
ld hl,(0a24ch)
inc hl
inc hl
ld a,004h
cp h
jr nz,la267h
ld hl,00000h
la267h:
ld (0a24ch),hl
ld bc,05398h
add hl,bc
ld de,(0a250h+2)
ld (0a237h),hl
ld (05648h),de
ld hl,(0a24ch)
ld bc,057e4h
add hl,bc
ld de,(0a250h)
ld (0a249),hl
ld (05a94h),de
ret
la24ch:
or b
ld (bc),a
ld c,b
ld (bc),a
cp (hl)
nop
jr nz,la295h
inc b
jr nz,$+3
cp h
end