;------------------------------- ; #NIBTABLE ; detect and fix non-standard ; nibble-to-byte translation ; e.g. Travels with Za-Zoom ;------------------------------- _nibtable jmp checkread readdata !byte 00,01 !byte $98,$99,02,03,$9C,04,05,06 !byte $A0,$A1,$A2,$A3,$A4,$A5,07,08 !byte $A8,$A9,$AA,09,$0A,$0B,$0C,$0D !byte $B0,$B1,$0E,$0F,$10,$11,$12,$13 !byte $B8,$14,$15,$16,$17,$18,$19,$1A !byte $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7 !byte $C8,$C9,$CA,$1B,$CC,$1C,$1D,$1E !byte $D0,$D1,$D2,$1F,$D4,$D5,$20,$21 !byte $D8,$22,$23,$24,$25,$26,$27,$28 !byte $E0,$E1,$E2,$E3,$E4,$29,$2A,$2B !byte $E8,$2C,$2D,$2E,$2F,$30,$31,$32 !byte $F0,$F1,$33,$34,$35,$36,$37,$38 !byte $F8,$39,$3A,$3B,$3C,$3D,$3E,$3F writedata !byte $96,$97,$9A,$9B,$9D,$9E,$9F,$A6 !byte $A7,$AB,$AC,$AD,$AE,$AF,$B2,$B3 !byte $B4,$B5,$B6,$B7,$B9,$BA,$BB,$BC !byte $BD,$BE,$BF,$CB,$CD,$CE,$CF,$D3 !byte $D6,$D7,$D9,$DA,$DB,$DC,$DD,$DE !byte $DF,$E5,$E6,$E7,$E9,$EA,$EB,$EC !byte $ED,$EE,$EF,$F2,$F3,$F4,$F5,$F6 !byte $F7,$F9,$FA,$FB,$FC,$FD,$FE,$FF checkread lda gIsRWTS ; if DOS 3.3 RWTS bne nibtable_exit lda #$02 ldx #$6D ldy #$03 jsr compare ; and T00,S02,$6D == !byte $BD,$29,$BA bcs checkwrite lda #$02 ldx #$82 ldy #$03 jsr compare ; and T00,S02,$82 == !byte $BD,$29,$BA bcs checkwrite lda #$02 ldx #$95 ldy #$03 jsr compare ; and T00,S02,$95 == !byte $BD,$29,$BA bcs checkwrite jsr fixwrite checkwrite lda #$03 ldx #$09 ldy #$03 jsr compare ; if T00,S03,$09 == !byte $59,00,$BA bcs nibtable_exit lda #$03 ldx #$1A ldy #$03 jsr compare ; and T00,S03,$1A == !byte $59,00,$BA bcs nibtable_exit lda #$03 ldx #$2A ldy #$03 jsr compare ; and T00,S03,$2A == !byte $D9,00,$BA bcs nibtable_exit jsr fixread nibtable_exit jmp nibtable_exit2 fixread lda #$00 sta nibsrcindex lda #$96 sta nibdestindex nibtable_read ldx nibsrcindex lda readdata,x sta nibcmpr sta nibmodr lda #$04 ldx nibdestindex ldy #$01 jsr compare nibcmpr !byte $FF bcc nomodr lda #$04 ldx nibdestindex ldy #$01 jsr modify nibmodr !byte $FF nomodr inc nibsrcindex inc nibdestindex bne nibtable_read rts fixwrite lda #$00 sta nibsrcindex lda #$29 sta nibdestindex nibtable_write ldx nibsrcindex lda writedata,x sta nibcmpw sta nibmodw lda #$04 ldx nibdestindex ldy #$01 jsr compare nibcmpw !byte $FF bcc nomodw lda #$04 ldx nibdestindex ldy #$01 jsr modify nibmodw !byte $FF nomodw inc nibsrcindex inc nibdestindex lda nibsrcindex cmp #$40 bne nibtable_write rts nibtable_exit2