passport/src/patchers/nibtable.a

137 lines
3.6 KiB
Plaintext
Executable File

;-------------------------------
; #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