mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-11 12:29:35 +00:00
205 lines
5.2 KiB
Plaintext
205 lines
5.2 KiB
Plaintext
|
NEW
|
|||
|
AUTO 3,1
|
|||
|
*--------------------------------------
|
|||
|
licode jsr MLI check for file 'atinit'
|
|||
|
.DA #MLIGETFILEINFO
|
|||
|
.DA gfi_list
|
|||
|
bcc gfi_ok branch if 'atinit' file found
|
|||
|
cmp #$46 file not found?
|
|||
|
beq H23DF if so, continue loading interpreter
|
|||
|
bne H23E2
|
|||
|
gfi_ok lda gfi_type
|
|||
|
cmp #$E2 is 'atinit' correct file type?
|
|||
|
bne H23E2 error - wrong file type
|
|||
|
jsr MLI open 'atinit' file
|
|||
|
.DA #$C8
|
|||
|
.DA atopen
|
|||
|
bne H23E2 error
|
|||
|
lda #$9F max size = 39.75k ($2000-$BF00)
|
|||
|
sta rdlen+1
|
|||
|
stz rdlen
|
|||
|
jsr MLI read 'atinit' file to 'sysentry'
|
|||
|
.DA #$CA
|
|||
|
.DA rdparm
|
|||
|
bne H23E2 error - too big
|
|||
|
jsr MLI close 'atinit' file
|
|||
|
.DA #$CC
|
|||
|
.DA clparm
|
|||
|
bne H23E2 error
|
|||
|
lda RROMBNK2 enable ROM
|
|||
|
jsr sysentry execute ATinit
|
|||
|
H23DF jmp goloadint execute .system file
|
|||
|
|
|||
|
* fatal error
|
|||
|
|
|||
|
H23E2 ldx $23F0 BUG: should be ATINIT.ERR
|
|||
|
H23E5 lda $23F0,x BUG: should be ATINIT.ERR
|
|||
|
sta vline16,x
|
|||
|
dex
|
|||
|
bne H23E5
|
|||
|
beq *
|
|||
|
|
|||
|
ATINIT.ERR .DA #$1A length of message
|
|||
|
.AS -"Unable to load ATInit file"
|
|||
|
gfi_list .DA #$0A
|
|||
|
.DA atinitname
|
|||
|
.HS 00
|
|||
|
gfi_type .HS 00000000
|
|||
|
.HS 0000000000000000
|
|||
|
.HS 0000
|
|||
|
atopen .HS 03
|
|||
|
.DA atinitname
|
|||
|
.DA iobuf i/o buffer
|
|||
|
.HS 01 ref# hard coded since no other files
|
|||
|
atinitname .DA #06 length of name
|
|||
|
.AS -"atinit" name of appletalk config file
|
|||
|
goloadint
|
|||
|
lda /dbuf search directory buffer
|
|||
|
sta idxl+1
|
|||
|
lda #$04 start 1 entry past header
|
|||
|
bne H2434 always.
|
|||
|
H2432 lda idxl calc next entry position
|
|||
|
H2434 clc
|
|||
|
adc dbuf+35 inc to next entry address
|
|||
|
sta idxl
|
|||
|
bcs H2451 branch if page cross.
|
|||
|
adc dbuf+35 test for end of block.
|
|||
|
bcc H2453 branch if not page cross
|
|||
|
lda idxl+1
|
|||
|
lsr end of block?
|
|||
|
bcc H2453 no.
|
|||
|
cmp #$09 end of directory?
|
|||
|
bne H244D no.
|
|||
|
jmp nointrp no interpreter, go quit.
|
|||
|
H244D lda #$04 reset index to 1st entry in next block.
|
|||
|
sta idxl
|
|||
|
H2451 inc idxl+1 inc to next page.
|
|||
|
H2453 ldy #$10 check file type.
|
|||
|
lda #$FF must be a prodos sys file
|
|||
|
eor (idxl),y
|
|||
|
bne H2432 if not sys.
|
|||
|
tay see if active
|
|||
|
lda (idxl),y
|
|||
|
beq H2432 if deleted file.
|
|||
|
and #$0F strip file 'kind'.
|
|||
|
sta pbuf save length of name.
|
|||
|
cmp #$08 must be at least 'x.system'
|
|||
|
bcc H2432 else, ignore it.
|
|||
|
tay compare last 7 chars for '.system'
|
|||
|
ldx #$06
|
|||
|
H246C lda (idxl),y
|
|||
|
eor iterp,x
|
|||
|
asl
|
|||
|
bne H2432 branch if something else
|
|||
|
dey
|
|||
|
dex
|
|||
|
bpl H246C
|
|||
|
ldy #$00
|
|||
|
H247A iny
|
|||
|
lda (idxl),y
|
|||
|
sta pbuf,y
|
|||
|
ora #$80 msb on so can be displayed if error
|
|||
|
sta iomess+$11,y
|
|||
|
cpy pbuf
|
|||
|
bne H247A
|
|||
|
lda #$A0 space after name
|
|||
|
sta iomess+$12,y
|
|||
|
tya error message length
|
|||
|
adc #$13 (carry set)
|
|||
|
sta ierlen
|
|||
|
jsr MLI open interpreter file
|
|||
|
.DA #$C8
|
|||
|
.DA opparm
|
|||
|
bne badlod
|
|||
|
jsr MLI get eof (length of file)
|
|||
|
.DA #$D1
|
|||
|
.DA efparm
|
|||
|
bne badlod
|
|||
|
lda eof+2
|
|||
|
bne toolong
|
|||
|
lda eof+1
|
|||
|
cmp #$9F max size = 39.75k ($2000-$BF00)
|
|||
|
bcs toolong
|
|||
|
sta rdlen+1
|
|||
|
lda eof
|
|||
|
sta rdlen (read entire file)
|
|||
|
jsr MLI read interpreter file
|
|||
|
.DA #$CA
|
|||
|
.DA rdparm
|
|||
|
beq H24C8 go close if successfully read.
|
|||
|
cmp #$56 memory conflict?
|
|||
|
beq toolong then too large
|
|||
|
bne badlod else, unable to load.
|
|||
|
H24C8 jsr MLI close interpreter file
|
|||
|
.DA #$CC
|
|||
|
.DA clparm
|
|||
|
bne badlod hopefully never taken
|
|||
|
|
|||
|
* if booting on a //c then see if esc is in keyboard buffer
|
|||
|
* and clear it. it may have been pressed to shift speed
|
|||
|
* of accelerator chip
|
|||
|
|
|||
|
lda cflag
|
|||
|
beq H24DF taken if not booting on a //c
|
|||
|
lda kbd else, check for keypress
|
|||
|
cmp #$9B escape?
|
|||
|
bne H24DF if not.
|
|||
|
sta KBDSTROBE clear keyboard
|
|||
|
H24DF lda RROMBNK2 enable ROM
|
|||
|
jmp sysentry go run interpreter
|
|||
|
|
|||
|
cflag .HS 00 set if a //c.
|
|||
|
|
|||
|
nointrp jsr MLI no interpreter found,so quit.
|
|||
|
.DA #$65
|
|||
|
.DA quitparm
|
|||
|
|
|||
|
badlod ldy ierlen center the error message
|
|||
|
lda #$27
|
|||
|
sec
|
|||
|
sbc ierlen
|
|||
|
lsr
|
|||
|
adc ierlen
|
|||
|
tax
|
|||
|
H24FA lda iomess,y
|
|||
|
sta vline16,x
|
|||
|
dex
|
|||
|
dey
|
|||
|
bpl H24FA
|
|||
|
bmi H2511
|
|||
|
toolong ldy #$1E
|
|||
|
H2508 lda lgmess,y
|
|||
|
sta vline16+5,y
|
|||
|
dey
|
|||
|
bpl H2508
|
|||
|
H2511 bmi H2511
|
|||
|
lgmess .AS -"** System program too large **"
|
|||
|
iomess .AS -"** Unable to load"
|
|||
|
.AS -" X.System *********"
|
|||
|
ierlen .HS 00
|
|||
|
opparm .HS 03
|
|||
|
.DA pbuf
|
|||
|
.DA iobuf
|
|||
|
.HS 01
|
|||
|
efparm .HS 02
|
|||
|
.DA #01
|
|||
|
eof .HS 000000 length of file.
|
|||
|
rdparm .HS 04
|
|||
|
.HS 01
|
|||
|
.DA sysentry
|
|||
|
rdlen .HS 0000
|
|||
|
.HS 0000
|
|||
|
clparm .HS 01
|
|||
|
.HS 00
|
|||
|
quitparm .HS 04
|
|||
|
.HS 00
|
|||
|
.HS 0000
|
|||
|
.HS 00
|
|||
|
.HS 0000
|
|||
|
iterp .AS -".SYSTEM" interpreter suffix that is required
|
|||
|
*--------------------------------------
|
|||
|
MAN
|
|||
|
SAVE USR/SRC/PRODOS.FX/PRODOS.S.ILDR
|
|||
|
LOAD USR/SRC/PRODOS.FX/PRODOS.S
|
|||
|
ASM
|