Changes

Jump to: navigation, search

Light pen driver

719 bytes added, Saturday at 08:21
add hl,de
l9cbd:
ld (0a410hdata_0a410h),hl ;; detected 'position' or 'ffff' for not detected
pop bc
ld a,082h
ret
;; HL = HL/DE
sub_9c94:
ld a,h
ret
;; HL = HL * DE
sub_9caeh:
ld a,l
;; detected.
ld de,00002h
call sub_9c94h;; HL = HL/DE
ld de,00064h
call sub_9caeh;; HL = HL*DE
ld de,00084h
call sub_9c94h;; HL = HL/DE
ex de,hl
ld hl,0018fh
sbc hl,de
ld (0a410hdata_0a410),hl
ret
sub_9d35h:
ld bc,(0a418hdata_0a418)
l9d79h:
push bc
ld hl,00014h
call 0bbf9h ;; gra line relative
ld de,(0a416hdata_0a416)
ld hl,0ffech
call 0bbc3h ;; gra move relative
ld hl,00000h
call 0bbc3h ;; gra move relative
ld bc,(0a420hdata_0a420)
l9db4h:
push bc
ld hl,00014h
call 0bbf9h ;; gra line relative
ld de,(0a416hdata_0a416)
ld hl,0ffech ;; -20
call 0bbc3h ;; gra move relative
djnz l9db4h
ld hl,0ffffh
ld (0a410hdata_0a410),hl
ret
sub_9d9ah:
pop bc
ld (0a410hdata_0a410),hl
call 0bbc6h ;; gra ask cursor
ld (0a412hdata_0a412),de
ret
push de
call sub_09e08h
ld (0a414hdata_0a414),hl
ld de,05398h
ld b,004h
l9e0bh:
push bc
ld hl,(0a414hdata_0a414)
ld c,b
ld b,000h
l9e2dh:
push bc
ld hl,(0a414hdata_0a414)
ld c,b
ld b,000h
push de
ld de,00002h
call sub_9c94h;; HL = HL/DE
pop de
push hl
ex de,hl
ld de,(0a416hdata_0a416) call sub_9c94h;; HL = HL/DE
ex de,hl
pop hl
sub_9e1fh:
call sub_9c8ah
ld hl,(0a418hdata_0a418) ld (0a420hdata_0a420h),hl ld hl,(0a410hdata_0a410)
ld a,0ffh
cp h
ret z
ld (0a41chdata_a41c),hl ld de,(0a412hdata_0a412) ld (0a41ahdata_a41a),de
l9e7ah:
ld de,0000ah
l9e85h:
push hl
ld hl,(0a412hdata_a412)
add hl,de
ex de,hl
call sub_09ed2h
call sub_09de6h
ld hl,(0a410hdata_a410)
ld a,0ffh
cp h
call 0bb1eh ;; km test key
ret z
ld hl,(0a41chdata_a41c) ld de,(0a41ahdata_a41a)
call 0bbc0h ;; gra move absolute
ld hl,(0a410hdata_a410) ld de,(0a412hdata_a412) ld a,(0a41ehdata_a41e)
call 0bbdeh ;; gra set pen
ld (0a41chdata_a41c),hl ld (0a41ahdata_a41a),de
call 0bbf6h ;; gra line absolute
ld hl,(0a410h)
sub_9eb7h:
ld hl,(0a41ahdata_a41a) ld de,(0a412hdata_a412)
and a
sbc hl,de
ld hl,00000h
call 0bbc3h ;; gra move relative
ld bc,(0a420hdata_a420)
push bc
ld de,00000h
jp nz,sub_9efeh
sub_9ef5h:
ld hl,(0a422hdata_a422) ld (0a410hdata_a410),hl
jp sub_9d9ah
sub_9efeh:
ld (0a422hdata_a422),hl ld de,(0a416hdata_a416)
ld hl,0ffech
call 0bbc3h ;; gra move relative
djnz l9f22h
ld hl,0ffffh
ld (0a410hdata_a410),hl
ret
sub_9f82h:
call sub_9e98h
ld bc,(0a420hdata_a420)
l9f5ch:
push bc
jp z,sub_9ef5h
ld (0a422hdata_0a422),hl ld de,(0a416hdata_a416)
ld hl,00000h
and a
call 0bbc3h ;; gra move relative
jp l9f0eh
 
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; screen dump to printer.
sub_0a028h:
ld a,013h;; INC instruction ld (0a124hla124),a
ld a,00eh
ld (0a0e2hla0e1+1),a ld a,(0a133hdata_a133)
bit 1,a
jr z,la083h
ld a,000h ;; NOP instruction ld (0a124hla124),a
ld a,007h
ld (0a0e2hla0e1+1),a
la083h:
call 0bd28h ;; mc reset printer
ld de,00000h
ld hl,00000h
ld (0a12dhdata_a12d),de
sub_a050h:
ld a,000h
ld (0a12chdata_a12c),a ;; accumulated pixels.
ld de,(0a12dhdata_a12d)
call sub_a10dh ;; store current graphics position
ld a,000h ;; number of columns low byte
call 0bd2bh ;; mc print char
ld a,(0a133hdata_a133)
bit 0,a
jr z,la0b4h
call 0bd2bh ;; mc print char
ld a,(0a12chdata_a12c) ;; pixel data
call 0bd2bh ;; mc print char
jr la0f9h
call 0bd2bh ;; mc print char
la0f9h:
ld a,(0a12chdata_a12c) ;; pixel data
call 0bd2bh ;; mc print char
call 0bb1eh ;; km test key
ret nz
ld hl,(0a12dhdata_a12d)la0e1:
ld de,0000eh
add hl,de
ld (0a12dhdata_a12d),hl
ld hl,00000h
call sub_a10dh
ld de,(0a12dhdata_a12d)
ld a,d
cp 002h
;; pixel is set to foreground. accumulate it into the pixel data so far
ld hl,(0a12chdata_a12c)
add hl,de
ld (0a12chdata_a12c),hl
ret
sub_a10dh:
ld (0a12fhdata_a12f),hl ld (0a131hdata_a131),de
ret
sub_a115h:
ld hl,(0a12fhdata_a12f) ld de,(0a131hdata_a131)
ret
call sub_a115h ;; get current X/Y graphics position
inc de ;; increment X to next pixel accross screen.
la124:
inc de
call sub_a10dh ;; set current X/Y graphics position
call 0bbf0h ;; gra test absolute
ret
data_a12c:
db 00h
data_a12d:
db 84h,02h
data_a12f:
db 00h,00h
data_a131:
dw 000eh
data_a133:
db 00h
data_a134:
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
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
ld a,b
la1aah:
ld (0a254hdata_a254),a
call 0bbc6h ;; gra ask cursor
ld (0a250hdata_a250),hl ld (0a250hdata_a250+2),de
la1b7h:
call 0bb99h ;; txt get paper
ld (0a1f9hpen_cmp+1),a
ld bc,00000h
ld (0a24chdata_a24c),bc ld (0a24ehdata_a24e),bc
call sub_a210
la18bh:
ld a,02fh ;; 47 - space
call 0bb1eh ;; km test key
ret nz
ld hl,(0a24ehdata_a24e)
inc hl
inc hl
ld hl,00000h
la1deh:
ld (0a24ehdata_a24e),hl
ld bc,05398h
add hl,bc
ld (0a1aahbuffer_addr3+2),hl;; +2 to skip ED,53buffer_addr3:
ld de,(055e0h)
ld hl,(0a24ehdata_a24e)
sub_a1efh:
ld bc,057e4h
add hl,bc
ld (0a1b7hbuffer_addr4+1),hl;; +1 to skip 22buffer_addr4:
ld hl,(05a2ch)
la1f9h: ld (la257hdata_a257),hl ld (0a255hdata_a255),de
ld bc,00000h
ld a,(0a254hdata_a254)
ld c,a
ex de,hl
dec hl
call sub_a1efh
ld hl,(0a24ehdata_a24e) ld de,(0a24chdata_a24c)
inc hl
inc hl
ret z
jp la18bh
 
sub_a1efh:
push de
pop hl
pop de
pen_cmp:
cp 000h
jr nz,la248h
ld (0a250hdata_a250),hl ld (0a250h+2data_a252),de
push bc
call sub_0a210h
pop bc
la248h:
ld hl,(0a257hdata_a257) ld de,(0a255hdata_a255)
ret
sub_a210:
ld hl,(0a250hdata_a250) ld de,(0a250h+2data_a252)
call 0bbeah ;; gra plot absolute
ld hl,(0a24chdata_a24c)
inc hl
inc hl
ld hl,00000h
la267h:
ld (0a24chdata_a24c),hl
ld bc,05398h
add hl,bc
ld de,(0a250h+2data_a252) ld (0a237hbuffer_addr1+2),hl;; +2 to skip ED, 53buffer_addr1:
ld (05648h),de
ld hl,(0a24chdata_a24c)
ld bc,057e4h
add hl,bc
ld de,(0a250hdata_a250) ld (0a249buffer_addr+2),hl;; +2 to skip ED, 53buffer_addr2:
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
;;Data area
data_a24c:
defw 02b0h
data_a24e:
defw 0248h
data_a250:
defw 0beh
data_a252:
defw 0120h
data_a254:
defb 04h
data_a255:
defw 0120h
data_a257:
defw 0bch
 
 
;; detected light pen position
data_a410:
defw 0
data_a412:
defw 0
;; memory/buffer address
data_a414:
defw 0
data_a416:
defw 0
data_a418:
defw 0
 
;; gra x,y position
data_a41a:
defw 0
data_a41c:
defw 0
;; graphics pen
data_a41e:
defb 0
defb 0
data_a420:
defw 0
end
</pre>
[[Category:Source code]]
2,591
edits