diff --git a/src/id/inspect0.a b/src/id/inspect0.a index 5105dad..ac4d98c 100755 --- a/src/id/inspect0.a +++ b/src/id/inspect0.a @@ -221,6 +221,7 @@ IDBootloader bcs + lda #s_micrograms jsr PrintByID + bcc .useuniv ; always branches ; ; Quick-DOS ; @@ -228,6 +229,14 @@ IDBootloader bcs + lda #s_quickdos jsr PrintByID + bcc .useuniv ; always branches +; +; RDOS +; ++ jsr IDRDOS + bcs + + lda #s_rdos + jsr PrintByID + .useuniv diff --git a/src/id/rdos.a b/src/id/rdos.a new file mode 100644 index 0000000..e3902e1 --- /dev/null +++ b/src/id/rdos.a @@ -0,0 +1,26 @@ +;------------------------------- +; IDRDOS +; identify RDOS 16-sector bootloader +; +; in: $0800..$08FF contains T00,S00 +; first page of track buffer also contains T00,S00 +; out: C clear if RDOS 16-sector bootloader found +; C set otherwise +; all registers clobbered +; all other flags clobbered +;------------------------------- +!zone { +IDRDOS + lda #$00 + ldx #$00 + ldy #$0E + jsr compare ; if T00,S00,$00 == + !byte $01 + !byte $A9,$60 ; LDA #$60 + !byte $8D,$01,$08; STA $0801 + !byte $A2,$00 ; LDX #$00 + !byte $A0,$1F ; LDY #$1F + !byte $B9,$00,$08; LDA $0800,Y + !byte $49 ; EOR + rts +} diff --git a/src/passport.a b/src/passport.a index 59064f4..ffba8f8 100755 --- a/src/passport.a +++ b/src/passport.a @@ -155,6 +155,7 @@ FirstMover !source "id/dos33.a" !source "id/prodos.a" !source "id/pascal.a" + !source "id/rdos.a" !source "id/jsr8b3.a" !source "id/mecc.a" !source "id/datasoft.a" diff --git a/src/patchers/rwtslog.a b/src/patchers/rwtslog.a index 7c650e0..c72df1e 100644 --- a/src/patchers/rwtslog.a +++ b/src/patchers/rwtslog.a @@ -11,36 +11,45 @@ ; disk allows either $D4 or $D5 for the ; first address prologue nibble ;------------------------------- - lda gIsRWTS ; if DOS 3.3 RWTS - bne + +; DOS 3.3 variant lda #$03 sta gDisplayBytes ldx #$4F ldy #$0A - jsr compare ; and T00,S03,$4F == + jsr compare ; if T00,S03,$4F == !byte $BD,$8C,$C0 !byte $10,$FB !byte $4A !byte WILDCARD,$6A !byte $D0,$EF - bcs + + bcc .yeslsr +; RDOS variant + ldx #$4D + ldy #$0A + jsr compare ; or T00,S03,$4D == + !byte $BD,$8C,$C0 + !byte $10,$FB + !byte $4A + !byte WILDCARD,$6A + !byte $D0,$EF + bcs .endlsr +.yeslsr lda #s_lsr6a jsr PrintByID inc gPatchCount -+ +.endlsr ;------------------------------- ; RWTS "CMP #$08 / BCS" identification ; disk allows either $DE or a timing bit ; for the first address epilogue nibble ;------------------------------- - lda gIsRWTS ; if DOS 3.3 RWTS - bne + +; DOS 3.3 variant lda #$03 sta gDisplayBytes ldx #$8B ldy #$15 - jsr compare ; and T00,S03,$8B == + jsr compare ; if T00,S03,$8B == !byte $BD,$8C,$C0 !byte $10,$FB !byte $C9,$DE @@ -53,53 +62,57 @@ !byte $EA !byte $18 !byte $60 - bcs + + bcc .yesbcs +; RDOS variant + ldx #$89 + ldy #$11 + jsr compare ; or T00,S03,$89 == + !byte $BD,$8C,$C0 + !byte $10,$FB + !byte $C9,$DE + !byte $F0,$09 + !byte $48 + !byte $68 + !byte $BD,$8C,$C0 + !byte $C9,$80 + !byte $B0 + bcs .endbcs +.yesbcs lda #s_bcs08 jsr PrintByID inc gPatchCount -+ +.endbcs ;------------------------------- ; RWTS "CMP / BNE 0" identification ; disk allows any value for ; for the first address epilogue nibble ;------------------------------- - lda gIsRWTS ; if DOS 3.3 RWTS - bne + +; DOS 3.3 variant lda #$03 sta gDisplayBytes ldx #$8B ldy #$09 - jsr compare ; and T00,S03,$8B == + jsr compare ; if T00,S03,$8B == !byte $BD,$8C,$C0 !byte $10,$FB !byte $C9,WILDCARD !byte $D0,$00 - bcs + - lda #s_cmpbne0 - jsr PrintByID - inc gPatchCount -+ - -;------------------------------- -; RWTS "CMP / BNE 0" identification (David-DOS variant) -; disk allows any value for -; for the first address epilogue nibble -;------------------------------- - lda gIsDavidDOS ; if David-DOS bootloader - bne + + bcc .yesbne0 +; David-DOS variant lda #$05 sta gDisplayBytes ldx #$8B ldy #$09 - jsr compare ; and T00,S05,$8B == + jsr compare ; or T00,S05,$8B == !byte $BD,$8C,$C0 !byte $10,$FB !byte $C9,WILDCARD !byte $D0,$00 - bcs + + bcs .endbne0 +.yesbne0 lda #s_cmpbne0 jsr PrintByID inc gPatchCount -+ +.endbne0 } diff --git a/src/strings/en.a b/src/strings/en.a index 41c4fa8..6d77dac 100755 --- a/src/strings/en.a +++ b/src/strings/en.a @@ -107,7 +107,8 @@ s_advint = $58 s_dos32b0 = $59 s_bootwrite = $5A s_rwtswrite = $5B -STRINGCOUNT = $5C +s_rdos = $5C +STRINGCOUNT = $5D !zone { StringTable @@ -203,6 +204,7 @@ StringTable !word .dos32boot0 !word .bootwrite !word .rwtswrite + !word .rdos ; ; Text can contain substitution strings, which ; are replaced by current values at runtime. Each @@ -228,7 +230,7 @@ StringTable ; can be set directly before calling PrintByID. ; .header - !text "Passport by 4am 2017-09-05",$00 + !text "Passport by 4am 2017-09-07",$00 .mainmenu !text "________________________________________",$8D,$8D,$8D,$8D,$8D,$8D,$8D !text " " @@ -506,4 +508,6 @@ StringTable !text "bootloader",$8D,$00 .rwtswrite !text "T00,S02 Writing built-in RWTS",$8D,$00 +.rdos + !text "T00,S00 Found RDOS bootloader",$8D,$00 }