add hl,de
l9cbd:
        ld (0a410hdata_0a410h),hl ;; detected 'position' or 'ffff' for not detected
        pop bc
        ld a,082h
        ld hl,0018fh
        sbc hl,de
        ld (0a410hdata_0a410),hl
        ret
sub_9ce4sub_9ce4h:
        ld a,000h
        ld bc,01a1ah
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 hl
        ex de,hl
        ld de,(0a416hdata_0a416)
        call sub_9c94h ;; HL = HL/DE
        ex de,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
;; 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,0eh,00h,00h,data_a131:        dw 000ehdata_a133:         db 00hdata_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
sub_a154h:
la1b7h:
        call 0bb99h ;; txt get paper
        ld (0a1f9hpen_cmp+1),a
        ld bc,00000h
        ld (data_a24c),bc
        ld (data_a24e),bc
        call sub_a210
la18bh:
        ld a,02fh  ;; 47 - space
        call 0bb1eh ;; km test key
        ld bc,05398h
        add hl,bc
        ld (0a1aahbuffer_addr3+2),hl;; +2 to skip ED,53buffer_addr3:
        ld de,(055e0h)
        ld hl,(data_a24e)
        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 (data_a255),de
        ld bc,00000h
        ret z
        jp la18bh
 
sub_a1efh:
        push de
        pop hl
        pop de
pen_cmp:
        cp 000h
        jr nz,la248h
        ld (data_a250),hl
        ld (data_a250+2data_a252),de
        push bc
        call sub_0a210h
sub_a210:
        ld hl,(data_a250)
        ld de,(data_a250+2data_a252)
        call 0bbeah ;; gra plot absolute
        ld hl,(data_a24c)
        ld bc,05398h
        add hl,bc
        ld de,(data_a250+2data_a252)        ld (0a237hbuffer_addr1+2),hl;; +2 to skip ED, 53buffer_addr1:
        ld (05648h),de
        ld hl,(data_a24c)
        add hl,bc
        ld de,(data_a250)
        ld (0a249buffer_addr+2),hl;; +2 to skip ED, 53buffer_addr2:
        ld (05a94h),de
        ret
 
;;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 positiondata_a410:        defw 0data_a412:        defw 0;; memory/buffer addressdata_a414:        defw 0data_a416:        defw 0data_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]]