NSC: More structure determination

This commit is contained in:
Joshua Bell 2017-11-25 16:15:42 -08:00
parent 613c12d7f0
commit d7b48628f4

View File

@ -54,6 +54,7 @@ SETVID := $FE93
.define HI(c) ((c)|$80) .define HI(c) ((c)|$80)
data_buffer = $1800
;;; -------------------------------------------------- ;;; --------------------------------------------------
@ -139,10 +140,10 @@ L1046: cld
jsr INIT jsr INIT
ldx #$17 ldx #$17
lda #$01 lda #$01
L1077: sta BITMAP,x : sta BITMAP,x
lda #$00 lda #$00
dex dex
bne L1077 bne :-
lda #$CF lda #$CF
sta BITMAP sta BITMAP
lda MACHID lda MACHID
@ -164,6 +165,8 @@ L1090: lda MACHID
jmp exit jmp exit
;;; --------------------------------------------------
L10BD: ldy #$03 L10BD: ldy #$03
L10BF: lda DATELO,y L10BF: lda DATELO,y
sta L1197,y sta L1197,y
@ -275,9 +278,11 @@ loop: lda L13FF,y
dey dey
bpl loop bpl loop
;; Set the "Recognizable Clock Card" bit
lda MACHID lda MACHID
ora #$01 ora #$01
sta MACHID sta MACHID
lda #$4C ; JMP opcode lda #$4C ; JMP opcode
sta DATETIME sta DATETIME
@ -294,7 +299,7 @@ loop: lda L13FF,y
.byte 0 .byte 0
;; Display the current date ;; Display the current date
lda DATELO+1 lda DATELO+1 ; month
ror a ror a
pha pha
lda DATELO lda DATELO
@ -305,22 +310,26 @@ loop: lda L13FF,y
rol a rol a
and #%00001111 and #%00001111
jsr cout_number jsr cout_number
lda #(HI '/')
lda #(HI '/') ; /
jsr COUT jsr COUT
pla
pla ; day
and #%00011111 and #%00011111
jsr cout_number jsr cout_number
lda #(HI '/')
lda #(HI '/') ; /
jsr COUT jsr COUT
pla
pla ; year
jsr cout_number jsr cout_number
jsr CROUT jsr CROUT
.endproc .endproc
;;; -------------------------------------------------- ;;; --------------------------------------------------
;; Twiddle reset vector?
exit: exit:
;; Twiddle reset vector?
lda #$65 lda #$65
sta $03F2 sta $03F2
lda #$13 lda #$13
@ -331,37 +340,39 @@ exit:
;;; -------------------------------------------------- ;;; --------------------------------------------------
;;; Invoke next .SYSTEM file ;;; Invoke next .SYSTEM file
.define SYSTEM_SUFFIX ".SYSTEM" .define SYSTEM_SUFFIX ".SYSTEM"
.proc find_next_sys_file
ptr := $A5
lda DEVNUM lda DEVNUM
sta read_block_params_unit_num sta read_block_params_unit_num
jsr read_block jsr read_block
lda $1823 lda data_buffer + $23
sta L128C sta adc1+1
lda $1824 lda data_buffer + $24
sta L1298 sta cmp1+1
lda #$01 lda #1
sta $A7 sta $A7
lda #$2B lda #<(data_buffer + $2B)
sta $A5 sta ptr
lda #$18 lda #>(data_buffer + $2B)
sta $A6 sta ptr+1
L124F: ldy #$10 L124F: ldy #$10
lda ($A5),y lda (ptr),y
cmp #$FF ; type=SYS ??? cmp #$FF ; type=SYS ???
bne L1288 bne L1288
ldy #$00 ldy #$00
lda ($A5),y lda (ptr),y
and #$30 and #$30
beq L1288 beq L1288
lda ($A5),y lda (ptr),y
and #$0F and #$0F
sta $A8 sta $A8
tay tay
;; Compare suffix - is it .SYSTEM? ;; Compare suffix - is it .SYSTEM?
ldx #.strlen(SYSTEM_SUFFIX)-1 ldx #.strlen(SYSTEM_SUFFIX)-1
L1268: lda ($A5),y L1268: lda (ptr),y
cmp suffix,x cmp suffix,x
bne L1288 bne L1288
dey dey
@ -370,7 +381,7 @@ L1268: lda ($A5),y
ldy self_name ldy self_name
cpy $A8 cpy $A8
bne L12BE bne L12BE
: lda ($A5),y : lda (ptr),y
cmp self_name,y cmp self_name,y
bne L12BE bne L12BE
dey dey
@ -379,17 +390,16 @@ L1268: lda ($A5),y
ror found_self_flag ror found_self_flag
;; go on to next file (???) ;; go on to next file (???)
L1288: lda $A5 L1288: lda ptr
clc clc
.byte $69 adc1: adc #$27
L128C: rmb2 $85 sta ptr
lda $90 bcc L1293
.byte $02 inc ptr+1
inc $A6 L1293: inc $A7
inc $A7
lda $A7 lda $A7
.byte $C9 cmp1: cmp #$0D
L1298: ora $B490 bcc $124F
lda $1802 lda $1802
sta read_block_params_block_num sta read_block_params_block_num
lda $1803 lda $1803
@ -399,10 +409,10 @@ L1298: ora $B490
jsr read_block jsr read_block
lda #$00 lda #$00
sta $A7 sta $A7
lda #$04 lda #<(data_buffer + $04)
sta $A5 sta ptr
lda #$18 lda #>(data_buffer + $04)
sta $A6 sta ptr+1
jmp L124F jmp L124F
L12BE: bit found_self_flag L12BE: bit found_self_flag
@ -417,10 +427,11 @@ L12C8: dex
eor #'/' eor #'/'
asl a asl a
bne L12C8 bne L12C8
L12D3: ldy #$00
L12D3: ldy #0
L12D5: iny L12D5: iny
inx inx
L12D7: lda ($A5),y L12D7: lda (ptr),y
sta PATHNAME,x sta PATHNAME,x
cpy $A8 cpy $A8
bcc L12D5 bcc L12D5
@ -441,30 +452,33 @@ L12E6: jsr zstrout
bpl :- bpl :-
bit KBDSTRB bit KBDSTRB
jmp quit jmp quit
.endproc
;;; -------------------------------------------------- ;;; --------------------------------------------------
;;; Output a high-ascii, null-terminated string. ;;; Output a high-ascii, null-terminated string.
;;; String immediately follows the JSR. ;;; String immediately follows the JSR.
.proc zstrout .proc zstrout
ptr := $A5
pla pla
sta $A5 sta ptr
pla pla
sta $A6 sta ptr+1
bne L1334 bne L1334
L132A: cmp #(HI 'a') ; lower-case? L132A: cmp #(HI 'a') ; lower-case?
bcc :+ bcc :+
and lowercase_mask ; make upper-case if needed and lowercase_mask ; make upper-case if needed
: jsr COUT : jsr COUT
L1334: inc $A5 L1334: inc ptr
bne L133A bne L133A
inc $A6 inc ptr+1
L133A: ldy #$00 L133A: ldy #$00
lda ($A5),y lda (ptr),y
bne L132A bne L132A
lda $A6 lda ptr+1
pha pha
lda $A5 lda ptr
pha pha
rts rts
.endproc .endproc
@ -526,7 +540,7 @@ lowercase_mask:
.proc read_block_params .proc read_block_params
.byte 3 ; param_count .byte 3 ; param_count
unit_num: .byte $60 ; unit_num unit_num: .byte $60 ; unit_num
.addr $1800 ; data_buffer .addr data_buffer ; data_buffer
block_num: .word 2 ; block_num block_num: .word 2 ; block_num
.endproc .endproc
read_block_params_unit_num := read_block_params::unit_num read_block_params_unit_num := read_block_params::unit_num
@ -584,7 +598,7 @@ block_num: .word 2 ; block_num
.proc open_params .proc open_params
.byte 3 ; param_count .byte 3 ; param_count
.addr PATHNAME ; pathname .addr PATHNAME ; pathname
.addr $1800 ; io_buffer .addr data_buffer ; io_buffer
ref_num:.byte 1 ; ref_num ref_num:.byte 1 ; ref_num
.endproc .endproc
open_params_ref_num := open_params::ref_num open_params_ref_num := open_params::ref_num