mirror of
https://github.com/a2stuff/prodos-drivers.git
synced 2024-07-09 18:28:59 +00:00
NSC: Tracing through self-modified code
This commit is contained in:
parent
99e4d15a12
commit
613c12d7f0
@ -52,6 +52,9 @@ SETVID := $FE93
|
|||||||
.endrep
|
.endrep
|
||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
.define HI(c) ((c)|$80)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;;; --------------------------------------------------
|
;;; --------------------------------------------------
|
||||||
|
|
||||||
@ -146,7 +149,7 @@ L1077: sta BITMAP,x
|
|||||||
and #$88
|
and #$88
|
||||||
bne L1090
|
bne L1090
|
||||||
lda #$DF
|
lda #$DF
|
||||||
sta cout_mask ; lower case to upper case
|
sta lowercase_mask ; lower case to upper case
|
||||||
L1090: lda MACHID
|
L1090: lda MACHID
|
||||||
and #$01
|
and #$01
|
||||||
beq L10BD
|
beq L10BD
|
||||||
@ -168,18 +171,18 @@ L10BF: lda DATELO,y
|
|||||||
bpl L10BF
|
bpl L10BF
|
||||||
lda #$CF
|
lda #$CF
|
||||||
ldy #$FF
|
ldy #$FF
|
||||||
sta L1403
|
sta ld4+2
|
||||||
sty L1402
|
sty ld4+1
|
||||||
sta L1470
|
sta st4+2
|
||||||
sty L146F
|
sty st4+1
|
||||||
lda #$00
|
lda #$00
|
||||||
sta L119C
|
sta L119C
|
||||||
lda #$03
|
lda #$03
|
||||||
L10DF: ora #$C0
|
L10DF: ora #$C0
|
||||||
sta L1407
|
sta st1+2
|
||||||
L10E4: sta L140A
|
L10E4: sta ld1+2
|
||||||
sta L1419
|
sta ld2+2
|
||||||
sta L1427
|
sta st2+2
|
||||||
lda #$03
|
lda #$03
|
||||||
sta L119B
|
sta L119B
|
||||||
L10F2: jsr L13FF
|
L10F2: jsr L13FF
|
||||||
@ -217,14 +220,14 @@ L1128: inc L119C
|
|||||||
bne L1151
|
bne L1151
|
||||||
lda #$C0
|
lda #$C0
|
||||||
ldy #$15
|
ldy #$15
|
||||||
sta L1403
|
sta ld4+2
|
||||||
sty L1402
|
sty ld4+1
|
||||||
ldy #$07
|
ldy #$07
|
||||||
sta L1407
|
sta st1+2
|
||||||
sty L1406
|
sty st1+1
|
||||||
dey
|
dey
|
||||||
sta L1470
|
sta st4+2
|
||||||
sty L146F
|
sty st4+1
|
||||||
lda #$C8
|
lda #$C8
|
||||||
bne L10E4
|
bne L10E4
|
||||||
L1151: ldy #$03
|
L1151: ldy #$03
|
||||||
@ -251,29 +254,37 @@ L119B: .byte $03
|
|||||||
L119C: brk
|
L119C: brk
|
||||||
|
|
||||||
;;; --------------------------------------------------
|
;;; --------------------------------------------------
|
||||||
|
;;; Install NSC Date Driver
|
||||||
|
|
||||||
L119D: lda DATETIME+1
|
.proc install_driver
|
||||||
|
lda DATETIME+1
|
||||||
sta $A5
|
sta $A5
|
||||||
clc
|
clc
|
||||||
adc #$73
|
adc #$73
|
||||||
sta L140E
|
sta ld3+1
|
||||||
lda DATETIME+2
|
lda DATETIME+2
|
||||||
sta $A6
|
sta $A6
|
||||||
adc #$00
|
adc #0
|
||||||
sta L140F
|
sta ld3+2
|
||||||
lda RWRAM1
|
lda RWRAM1
|
||||||
lda RWRAM1
|
lda RWRAM1
|
||||||
ldy #$7C
|
ldy #$7C
|
||||||
L11BA: lda L13FF,y
|
|
||||||
|
loop: lda L13FF,y
|
||||||
sta ($A5),y
|
sta ($A5),y
|
||||||
dey
|
dey
|
||||||
bpl L11BA
|
bpl loop
|
||||||
|
|
||||||
lda MACHID
|
lda MACHID
|
||||||
ora #$01
|
ora #$01
|
||||||
sta MACHID
|
sta MACHID
|
||||||
lda #$4C ; JMP opcode
|
lda #$4C ; JMP opcode
|
||||||
sta DATETIME
|
sta DATETIME
|
||||||
|
|
||||||
|
;; Invoke the driver to init the time
|
||||||
jsr DATETIME
|
jsr DATETIME
|
||||||
|
|
||||||
|
;; Display success message
|
||||||
bit ROMIN2
|
bit ROMIN2
|
||||||
jsr MON_HOME
|
jsr MON_HOME
|
||||||
jsr zstrout
|
jsr zstrout
|
||||||
@ -282,6 +293,7 @@ L11BA: lda L13FF,y
|
|||||||
HIASCII "No-Slot Clock Installed "
|
HIASCII "No-Slot Clock Installed "
|
||||||
.byte 0
|
.byte 0
|
||||||
|
|
||||||
|
;; Display the current date
|
||||||
lda DATELO+1
|
lda DATELO+1
|
||||||
ror a
|
ror a
|
||||||
pha
|
pha
|
||||||
@ -291,18 +303,19 @@ L11BA: lda L13FF,y
|
|||||||
rol a
|
rol a
|
||||||
rol a
|
rol a
|
||||||
rol a
|
rol a
|
||||||
and #$0F
|
and #%00001111
|
||||||
jsr L1347
|
jsr cout_number
|
||||||
lda #$AF
|
lda #(HI '/')
|
||||||
jsr COUT
|
jsr COUT
|
||||||
pla
|
pla
|
||||||
and #$1F
|
and #%00011111
|
||||||
jsr L1347
|
jsr cout_number
|
||||||
lda #$AF
|
lda #(HI '/')
|
||||||
jsr COUT
|
jsr COUT
|
||||||
pla
|
pla
|
||||||
jsr L1347
|
jsr cout_number
|
||||||
jsr CROUT
|
jsr CROUT
|
||||||
|
.endproc
|
||||||
|
|
||||||
;;; --------------------------------------------------
|
;;; --------------------------------------------------
|
||||||
|
|
||||||
@ -439,9 +452,9 @@ L12E6: jsr zstrout
|
|||||||
pla
|
pla
|
||||||
sta $A6
|
sta $A6
|
||||||
bne L1334
|
bne L1334
|
||||||
L132A: cmp #('a'|$80) ; lower-case?
|
L132A: cmp #(HI 'a') ; lower-case?
|
||||||
bcc :+
|
bcc :+
|
||||||
and cout_mask ; make upper-case if needed
|
and lowercase_mask ; make upper-case if needed
|
||||||
: jsr COUT
|
: jsr COUT
|
||||||
L1334: inc $A5
|
L1334: inc $A5
|
||||||
bne L133A
|
bne L133A
|
||||||
@ -457,26 +470,35 @@ L133A: ldy #$00
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; --------------------------------------------------
|
;;; --------------------------------------------------
|
||||||
|
;;; COUT a 2-digit number in A
|
||||||
|
|
||||||
L1347: ldx #$B0
|
.proc cout_number
|
||||||
cmp #$0A
|
ldx #(HI '0')
|
||||||
bcc L1354
|
cmp #10 ; >= 10?
|
||||||
L134D: sbc #$0A
|
bcc tens
|
||||||
|
|
||||||
|
;; divide by 10, dividend(+'0') in x remainder in a
|
||||||
|
: sbc #10
|
||||||
inx
|
inx
|
||||||
cmp #$0A
|
cmp #10
|
||||||
bcs L134D
|
bcs :-
|
||||||
L1354: pha
|
|
||||||
cpx #$B0
|
tens: pha
|
||||||
beq L135D
|
cpx #(HI '0')
|
||||||
|
beq units
|
||||||
txa
|
txa
|
||||||
L135A: jsr COUT
|
jsr COUT
|
||||||
L135D: pla
|
|
||||||
ora #$B0
|
units: pla
|
||||||
|
ora #(HI '0')
|
||||||
jsr COUT
|
jsr COUT
|
||||||
rts
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
cout_mask:
|
;;; --------------------------------------------------
|
||||||
.byte $FF
|
|
||||||
|
lowercase_mask:
|
||||||
|
.byte $FF ; Set to $DF on systems w/o lower-case
|
||||||
|
|
||||||
;;; --------------------------------------------------
|
;;; --------------------------------------------------
|
||||||
|
|
||||||
@ -596,36 +618,29 @@ self_name:
|
|||||||
|
|
||||||
L13FF: php
|
L13FF: php
|
||||||
sei
|
sei
|
||||||
.byte $AD
|
ld4: lda $CFFF
|
||||||
L1402: .byte $FF
|
pha
|
||||||
L1403: bbs4 $48,$1393
|
st1: sta $C300 ; self-modified
|
||||||
L1406: brk
|
ld1: lda $C304 ; self-modified
|
||||||
L1407: .byte $C3
|
ldx #8
|
||||||
.byte $AD
|
L140D:
|
||||||
.byte $04
|
ld3: lda $1472,x ; self-modified
|
||||||
L140A: .byte $C3
|
sec
|
||||||
ldx #$08
|
|
||||||
L140D: .byte $BD
|
|
||||||
L140E: .byte $72
|
|
||||||
L140F: trb $38
|
|
||||||
ror a
|
ror a
|
||||||
L1412: pha
|
L1412: pha
|
||||||
lda #$00
|
lda #0
|
||||||
rol a
|
rol a
|
||||||
tay
|
tay
|
||||||
.byte $B9
|
ld2: lda $C300,y ; self-modified
|
||||||
brk
|
|
||||||
L1419: .byte $C3
|
|
||||||
pla
|
pla
|
||||||
lsr a
|
lsr a
|
||||||
bne L1412
|
bne L1412
|
||||||
dex
|
dex
|
||||||
bne L140D
|
bne L140D
|
||||||
ldx #$08
|
ldx #8
|
||||||
L1423: ldy #$08
|
L1423: ldy #8
|
||||||
L1425: .byte $AD
|
st2:
|
||||||
.byte $04
|
L1425: lda $C304 ; self-modified
|
||||||
L1427: .byte $C3
|
|
||||||
ror a
|
ror a
|
||||||
ror $01FF,x
|
ror $01FF,x
|
||||||
dey
|
dey
|
||||||
@ -643,9 +658,7 @@ L1427: .byte $C3
|
|||||||
L143F: adc #$0A
|
L143F: adc #$0A
|
||||||
dey
|
dey
|
||||||
bne L143F
|
bne L143F
|
||||||
.byte $9D
|
sta $01FF,x
|
||||||
L1445: .byte $FF
|
|
||||||
.byte $01
|
|
||||||
L1447: dex
|
L1447: dex
|
||||||
bne L1423
|
bne L1423
|
||||||
lda $0204
|
lda $0204
|
||||||
@ -665,9 +678,7 @@ L1447: dex
|
|||||||
sta DATELO+1
|
sta DATELO+1
|
||||||
pla
|
pla
|
||||||
bmi L1471
|
bmi L1471
|
||||||
.byte $8D
|
st4: sta $CFFF ; self-modified
|
||||||
L146F: .byte $FF
|
|
||||||
L1470: .byte $CF
|
|
||||||
L1471: plp
|
L1471: plp
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user