|
- .equ COM_DRV_ADDR 0x0238 ; replace with *CL's DCB addr
- .equ DEST_ADDR 0x3000 ; memory address where to put contents.
-
- ; We process the 0x20 exception by pre-putting a mask in the (HL) we're going
- ; to write to. If it wasn't a 0x20, we put a 0xff mask. If it was a 0x20, we
- ; put a 0x7f mask.
-
- ld hl, DEST_ADDR
- loop:
- ld a, 0xff
- ld (hl), a ; default mask
- loop2:
- ld a, 0x03 ; @GET
- ld de, COM_DRV_ADDR
- rst 0x28
- jr nz, maybeerror
- or a
- ret z ; Sending a straight NULL ends the comm.
- ; @PUT that char back
- ld c, a
- ld a, 0x04 ; @PUT
- rst 0x28
- jr nz, error
- ld a, c
- cp 0x20
- jr z, escapechar
- ; not an escape char, just apply the mask and write
- and (hl)
- ld (hl), a
- inc hl
- jr loop
- escapechar:
- ; adjust by setting (hl) to 0x7f
- res 7, (hl)
- jr loop2
- maybeerror:
- ; was it an error?
- or a
- jr z, loop2 ; not an error, just loop
- ; error
- error:
- ld c, a ; Error code from @GET/@PUT
- ld a, 0x1a ; @ERROR
- rst 0x28
- ret
|