unaligned: xor a rld rld cp $0F ld c,a jr nz,getchar1u rld inc hl rld cp $0F ld c,a jr nz,getchar2u rld ld c,a jr dotable3u getchar2u: rld rld ld a,$F add a,c ld c,a jr dotable getchar1u: rld inc hl pop af xor $FF push af jr dotable dotable3u: rld inc hl jr dotable3 Decode: ; hl = pointer ld de,TEXT_MEM xor a push af ReadCodeLoop: pop af push af or a jr nz,unaligned xor a rld cp $0F ld c,a jr nz,getchar1 rld cp $0F ld c,a jr nz,getchar2 rld inc hl rld ld c,a rld rld dotable3: ld a,$F+$F add a,c ld c,a pop af xor $FF push af jr dotable getchar1: rld rld pop af xor $FF push af jr dotable getchar2: rld ;can't corrupt inc hl ld a,$F add a,c ld c,a dotable: ld a,c ld bc,table add a,c ld c,a ld a,(bc) ld (de),a inc de or a jr z,itsDone jr ReadCodeLoop itsDone: pop af ret table: .db "E","A","I","O","U","T","H","D","S","L","M","N","Y"," ","R" .db "B","F",".","C","X","G","?","P","K",",","V","W","J","!","Z" .db "Q","1","2","3","4","5","6","7","8","9","0",":",0