mirror of https://github.com/A2osX/A2osX.git
Kernel 0.93+
This commit is contained in:
parent
683ebaf9cd
commit
834281c40b
Binary file not shown.
|
@ -4,64 +4,63 @@ NEW
|
|||
* Cortland clock driver
|
||||
* $2F80-$2FFC moved to $D742
|
||||
|
||||
ofsC .EQ cclock_0-tclk_in offset to Cortland clock org
|
||||
.OP 65816
|
||||
ofsC .EQ cclock_0-tclk_in offset to Cortland clock org
|
||||
|
||||
cclock_0 SHORT I,M 8 bit mode.
|
||||
lda statereg state register.
|
||||
sta savestate save for restore after tool call.
|
||||
and #$CF clear the read/write aux memory bits.
|
||||
sta statereg make it real
|
||||
clc set e = 0 to set native mode
|
||||
xce
|
||||
LONG I,M 16 bit mode.
|
||||
lda #$0000 zero out result space.
|
||||
pha push 4 words for hex time result
|
||||
pha
|
||||
pha
|
||||
pha
|
||||
_ReadTimeHex
|
||||
SHORT M back to 8 bit to get results from stack
|
||||
lda savestate restore state register
|
||||
sta statereg
|
||||
pla pull off seconds and ignore
|
||||
pla
|
||||
sta p8time minutes
|
||||
pla
|
||||
sta p8time+1 hours
|
||||
pla year
|
||||
H2FB1 cmp #100 out of range?
|
||||
bcc H2FB9 no, go ahead and store
|
||||
sbc #$64 else put back in range.
|
||||
bra H2FB1 try again
|
||||
H2FB9 sta p8date+1 year
|
||||
pla
|
||||
inc a increment day for Prodos 8 format.
|
||||
sta p8date day
|
||||
pla month
|
||||
inc a increment month for Prodos 8 format.
|
||||
asl a shift month as it sits in between
|
||||
asl a the year and day values.
|
||||
asl a
|
||||
asl a
|
||||
asl a
|
||||
ora p8date put all but the top bit of month
|
||||
sta p8date value in the day byte.
|
||||
rol p8date+1 put hi bit of month in low bit of year
|
||||
pla pull of unused byte
|
||||
pla pull off day of week. stack now clean.
|
||||
sec go back to emulation mode
|
||||
xce to continue with Prodos 8
|
||||
rts
|
||||
savestate .EQ *-ofsC
|
||||
.DA #00' state of the state register
|
||||
dc c'JIMJAYKERRY'
|
||||
dc h'26' ampersand (Orca assembler doesn't like)
|
||||
dc c'MIKE'
|
||||
.DA #0000000000000000' pad 0's until length
|
||||
.DA #0000000000000000' of driver = 125 bytes.
|
||||
.DA #000000000000'
|
||||
cclk_end .EQ * end of obj cclock_0.
|
||||
dc h'000000' pad to page boundary
|
||||
cclock_0 SHORT I,M 8 bit mode.
|
||||
lda statereg state register.
|
||||
sta savestate save for restore after tool call.
|
||||
and #$CF clear the read/write aux memory bits.
|
||||
sta statereg make it real
|
||||
clc set e = 0 to set native mode
|
||||
xce
|
||||
LONG I,M 16 bit mode.
|
||||
lda #$0000 zero out result space.
|
||||
pha push 4 words for hex time result
|
||||
pha
|
||||
pha
|
||||
pha
|
||||
_ReadTimeHex
|
||||
SHORT M back to 8 bit to get results from stack
|
||||
lda savestate restore state register
|
||||
sta statereg
|
||||
pla pull off seconds and ignore
|
||||
pla
|
||||
sta p8time minutes
|
||||
pla
|
||||
sta p8time+1 hours
|
||||
pla year
|
||||
H2FB1 cmp #100 out of range?
|
||||
bcc H2FB9 no, go ahead and store
|
||||
sbc #$64 else put back in range.
|
||||
bra H2FB1 try again
|
||||
H2FB9 sta p8date+1 year
|
||||
pla
|
||||
inc a increment day for Prodos 8 format.
|
||||
sta p8date day
|
||||
pla month
|
||||
inc a increment month for Prodos 8 format.
|
||||
asl a shift month as it sits in between
|
||||
asl a the year and day values.
|
||||
asl a
|
||||
asl a
|
||||
asl a
|
||||
ora p8date put all but the top bit of month
|
||||
sta p8date value in the day byte.
|
||||
rol p8date+1 put hi bit of month in low bit of year
|
||||
pla pull of unused byte
|
||||
pla pull off day of week. stack now clean.
|
||||
sec go back to emulation mode
|
||||
xce to continue with Prodos 8
|
||||
rts
|
||||
savestate .EQ *-ofsC
|
||||
.HS 00 state of the state register
|
||||
.AS "JIMJAYKERRY&MIKE"
|
||||
.HS 0000000000000000 pad 0's until length
|
||||
.HS 0000000000000000 of driver = 125 bytes.
|
||||
.HS 000000000000
|
||||
cclk_end .EQ * end of obj cclock_0.
|
||||
.HS 000000 pad to page boundary
|
||||
LONGI OFF
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3,186 +3,194 @@ NEW
|
|||
* object code = mli_1
|
||||
* global page
|
||||
|
||||
ofsG .EQ H2E00-MLI offset to global org
|
||||
ofsG .EQ H2E00-MLI offset to global org
|
||||
|
||||
H2E00 jmp mlient1 $2E00-2EFF moved to $BF00
|
||||
jspare .EQ *-ofsG
|
||||
jmp jspare will be changed to point to dispatcher.
|
||||
clockv .EQ *-ofsG P8 clock vector
|
||||
rts changed to jmp ($4C) if clock present.
|
||||
.DA tclk_in' clock routine entry address.
|
||||
p8errv .EQ *-ofsG error reporting hook.
|
||||
jmp syserr1
|
||||
sysdeath .EQ *-ofsG
|
||||
jmp sysdeath1 system failure hook.
|
||||
p8error .EQ *-ofsG P8 error code
|
||||
.DA #00'
|
||||
drivertbl1 .EQ *-ofsG device driver table 1
|
||||
dc i2'nodevice' slot 0 reserved
|
||||
dc i2'nodevice' s1, d1
|
||||
dc i2'nodevice' s2, d1
|
||||
dc i2'nodevice' s3, d1
|
||||
dc i2'nodevice' s4, d1
|
||||
dc i2'nodevice' s5, d1
|
||||
dc i2'nodevice' s6, d1
|
||||
dc i2'nodevice' s7, d1
|
||||
drivertbl2 .EQ *-ofsG device driver table 2
|
||||
dc i2'nodevice' slot 0 reserved
|
||||
dc i2'nodevice' s1, d2
|
||||
dc i2'nodevice' s2, d2
|
||||
dc i2'nodevice' s3, d2
|
||||
dc i2'nodevice' s4, d2
|
||||
dc i2'nodevice' s5, d2
|
||||
dc i2'nodevice' s6, d2
|
||||
dc i2'nodevice' s7, d2
|
||||
devnum .EQ *-ofsG most recent accessed device
|
||||
.DA #00'
|
||||
numdevs .EQ *-ofsG count (-1) active devices
|
||||
dc h'FF'
|
||||
devlist .EQ *-ofsG active device list
|
||||
dc h'00000000000000' up to 14 units may be active
|
||||
dc h'00000000000000'
|
||||
.DA #00'
|
||||
msb off
|
||||
dc c'(C)APPLE '
|
||||
mlient1 .EQ *-ofsG
|
||||
php
|
||||
sei
|
||||
jmp mlicont
|
||||
aftirq .EQ *-ofsG irq returns here.
|
||||
sta ramin read/write RAM bank 1
|
||||
jmp fix45 restore $45 after interrupt in LC
|
||||
oldacc .EQ *-ofsG
|
||||
.DA #00'
|
||||
afbank .EQ *-ofsG
|
||||
dc h'00'
|
||||
H2E00 jmp mlient1 $2E00-2EFF moved to $BF00
|
||||
jspare .EQ *-ofsG
|
||||
jmp jspare will be changed to point to dispatcher.
|
||||
clockv .EQ *-ofsG P8 clock vector
|
||||
rts changed to jmp ($4C) if clock present.
|
||||
.DA tclk_in clock routine entry address.
|
||||
p8errv .EQ *-ofsG error reporting hook.
|
||||
jmp syserr1
|
||||
sysdeath .EQ *-ofsG
|
||||
jmp sysdeath1 system failure hook.
|
||||
p8error .EQ *-ofsG P8 error code
|
||||
.DA #0
|
||||
drivertbl1 .EQ *-ofsG device driver table 1
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
drivertbl2 .EQ *-ofsG device driver table 2
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
devnum .EQ *-ofsG most recent accessed device
|
||||
.DA #0
|
||||
numdevs .EQ *-ofsG count (-1) active devices
|
||||
.DA #$ff
|
||||
devlist .EQ *-ofsG active device list
|
||||
.HS 00000000000000 up to 14 units may be active
|
||||
.HS 00000000000000
|
||||
.DA #0
|
||||
|
||||
.AS "(C)APPLE "
|
||||
mlient1 .EQ *-ofsG
|
||||
php
|
||||
sei
|
||||
jmp mlicont
|
||||
aftirq .EQ *-ofsG irq returns here.
|
||||
sta ramin read/write RAM bank 1
|
||||
jmp fix45 restore $45 after interrupt in LC
|
||||
oldacc .EQ *-ofsG
|
||||
.DA #0
|
||||
afbank .EQ *-ofsG
|
||||
.HS 0
|
||||
|
||||
* memory map of lower 48k. each bit represents 1 page.
|
||||
* protected pages = 1, unprotected = 0
|
||||
|
||||
memmap .EQ *-ofsG P8 memory bitmap
|
||||
dc h'C000000000000000'
|
||||
dc h'0000000000000000'
|
||||
.DA #0000000000000001'
|
||||
memmap .EQ *-ofsG P8 memory bitmap
|
||||
.HS C000000000000000
|
||||
.HS 0000000000000000
|
||||
.HS 0000000000000001
|
||||
|
||||
* table of buffer addresses for currently open files.
|
||||
* these can only be changed thru the mli call setbuf.
|
||||
|
||||
buftbl .EQ *-ofsG
|
||||
dc h'0000' file #1
|
||||
dc h'0000' file #2
|
||||
dc h'0000' file #3
|
||||
dc h'0000' file #4
|
||||
.DA #0000' file #5
|
||||
dc h'0000' file #6
|
||||
dc h'0000' file #7
|
||||
dc h'0000' file #8
|
||||
buftbl .EQ *-ofsG
|
||||
.HS 0000 file #1
|
||||
.HS 0000 file #2
|
||||
.HS 0000 file #3
|
||||
.HS 0000 file #4
|
||||
.HS 0000 file #5
|
||||
.HS 0000 file #6
|
||||
.HS 0000 file #7
|
||||
.HS 0000 file #8
|
||||
|
||||
* table of interrupt vectors. these can only be changed
|
||||
* by the mli call allocate_interrupt. values of the registers
|
||||
* at the time of the most recent interrupt are stored here along
|
||||
* with the address interrupted.
|
||||
|
||||
inttbl .EQ *-ofsG interrupt table
|
||||
.DA #0000' int #1
|
||||
dc h'0000' int #2
|
||||
dc h'0000' int #3
|
||||
dc h'0000' int #4
|
||||
p8areg .EQ *-ofsG A register savearea
|
||||
.DA #00'
|
||||
p8xreg .EQ *-ofsG X register savearea
|
||||
dc h'00'
|
||||
p8yreg .EQ *-ofsG Y register savearea
|
||||
dc h'00'
|
||||
p8sreg .EQ *-ofsG S register savearea
|
||||
dc h'00'
|
||||
p8preg .EQ *-ofsG P register savearea
|
||||
dc h'00'
|
||||
bankid .EQ *-ofsG bank ID byte (ROM/RAM)
|
||||
dc h'01'
|
||||
intadr .EQ *-ofsG interrupt return address
|
||||
dc h'0000'
|
||||
p8date .EQ *-ofsG bits 15-9=yr, 8-5=mo, 4-0=day
|
||||
dc h'0000'
|
||||
p8time .EQ *-ofsG bits 12-8=hr, 5-0=min, low-hi format
|
||||
dc h'0000'
|
||||
flevel .EQ *-ofsG current file level
|
||||
dc h'00'
|
||||
bubit .EQ *-ofsG backup bit disable, setfileinfo only
|
||||
dc h'00'
|
||||
spare1 .EQ *-ofsG used to save acc
|
||||
dc h'00'
|
||||
newpfxptr .EQ *-ofsG appletalk alternate prefix ptr
|
||||
dc h'00'
|
||||
machid .EQ *-ofsG machine ID byte
|
||||
dc h'00'
|
||||
rommap .EQ *-ofsG slot ROM bit map
|
||||
dc h'00'
|
||||
preflag .EQ *-ofsG prefix active flag
|
||||
dc h'00'
|
||||
mliact .EQ *-ofsG MLI active flag
|
||||
dc h'00'
|
||||
mliretn .EQ *-ofsG last MLI call return address
|
||||
dc h'0000'
|
||||
mlix .EQ *-ofsG MLI X register savearea
|
||||
dc h'00'
|
||||
mliy .EQ *-ofsG MLI Y register savearea
|
||||
dc h'00'
|
||||
inttbl .EQ *-ofsG interrupt table
|
||||
.HS 0000 int #1
|
||||
.HS 0000 int #2
|
||||
.HS 0000 int #3
|
||||
.HS 0000 int #4
|
||||
p8areg .EQ *-ofsG A register savearea
|
||||
.DA #0
|
||||
p8xreg .EQ *-ofsG X register savearea
|
||||
.DA #0
|
||||
p8yreg .EQ *-ofsG Y register savearea
|
||||
.DA #0
|
||||
p8sreg .EQ *-ofsG S register savearea
|
||||
.DA #0
|
||||
p8preg .EQ *-ofsG P register savearea
|
||||
.DA #0
|
||||
bankid .EQ *-ofsG bank ID byte (ROM/RAM)
|
||||
.DA #1
|
||||
intadr .EQ *-ofsG interrupt return address
|
||||
.HS 0000
|
||||
p8date .EQ *-ofsG bits 15-9=yr, 8-5=mo, 4-0=day
|
||||
.HS 0000
|
||||
p8time .EQ *-ofsG bits 12-8=hr, 5-0=min, low-hi format
|
||||
.HS 0000
|
||||
flevel .EQ *-ofsG current file level
|
||||
.DA #0
|
||||
bubit .EQ *-ofsG backup bit disable, setfileinfo only
|
||||
.DA #0
|
||||
spare1 .EQ *-ofsG used to save acc
|
||||
.DA #0
|
||||
newpfxptr .EQ *-ofsG appletalk alternate prefix ptr
|
||||
.DA #0
|
||||
machid .EQ *-ofsG machine ID byte
|
||||
.DA #0
|
||||
rommap .EQ *-ofsG slot ROM bit map
|
||||
.DA #0
|
||||
preflag .EQ *-ofsG prefix active flag
|
||||
.DA #0
|
||||
mliact .EQ *-ofsG MLI active flag
|
||||
.DA #0
|
||||
mliretn .EQ *-ofsG last MLI call return address
|
||||
.DA 0
|
||||
mlix .EQ *-ofsG MLI X register savearea
|
||||
.DA #0
|
||||
mliy .EQ *-ofsG MLI Y register savearea
|
||||
.DA #0
|
||||
|
||||
* language card bank switching routines which must reside at $BFA0 because
|
||||
* workstation software patches this area
|
||||
|
||||
HBFA0 .EQ *-ofsG
|
||||
eor $E000 test for rom enable
|
||||
beq L2EAA taken if ram enabled
|
||||
sta romin read ROM
|
||||
bne L2EB5 always
|
||||
L2EAA lda bnkbyt2 for alternate ram
|
||||
eor $D000 test
|
||||
beq L2EB5 branch if not alternate ram
|
||||
lda altram else enable alt $D000
|
||||
L2EB5 pla return code
|
||||
rti re-enable interrupts and return
|
||||
mlicont .EQ *-ofsG
|
||||
sec
|
||||
ror mliact notify interrupt routines MLI active.
|
||||
lda $E000 preserve language card/rom orientation
|
||||
sta bnkbyt1 for proper restoration when mli exits.
|
||||
lda $D000
|
||||
sta bnkbyt2
|
||||
lda ramin force ram card on
|
||||
lda ramin with write allowed
|
||||
jmp xdosmli
|
||||
irqexit .EQ *-ofsG
|
||||
lda bankid determine state of ram card (ROM/RAM)
|
||||
irqxit0 .EQ *-ofsG
|
||||
beq L2EE2 branch if ram card enabled.
|
||||
bmi L2EDF branch if alternate $D000 enabled.
|
||||
lsr a determine if no ram card present.
|
||||
bcc L2EE7 branch if rom only system.
|
||||
lda romin1 enable rom
|
||||
bcs L2EE7 always taken
|
||||
L2EDF lda altram enable alternate $D000
|
||||
L2EE2 lda #$01 preset bankid for rom.
|
||||
sta bankid (reset if ram card interrupt)
|
||||
L2EE7 lda p8areg restore acc
|
||||
rti exit
|
||||
irqent .EQ *-ofsG this entry only used when rom
|
||||
bit ramin was enabled at time of interrupt.
|
||||
bit ramin
|
||||
jmp irqrecev
|
||||
bnkbyt1 .EQ *-ofsG
|
||||
dc h'00'
|
||||
bnkbyt2 .EQ *-ofsG
|
||||
dc h'00'
|
||||
dc h'00000000' pad to before $BFFA
|
||||
dc h'04' gsos compatibility byte ($BFFA)
|
||||
.DA #00' pad
|
||||
dc h'00' reserved
|
||||
dc h'00' version # of running interpreter
|
||||
dc h'00' preserved for System Utilities
|
||||
kversion .EQ *-ofsG kernal version
|
||||
dc h'23' represents release 2.0.3
|
||||
HBFA0 .EQ *-ofsG
|
||||
eor $E000 test for rom enable
|
||||
beq .1 taken if ram enabled
|
||||
sta romin read ROM
|
||||
bne .2 always
|
||||
.1 lda bnkbyt2 for alternate ram
|
||||
eor $D000 test
|
||||
beq .2 branch if not alternate ram
|
||||
lda altram else enable alt $D000
|
||||
.2 pla return code
|
||||
rti re-enable interrupts and return
|
||||
|
||||
mlicont .EQ *-ofsG
|
||||
sec
|
||||
ror mliact notify interrupt routines MLI active.
|
||||
lda $E000 preserve language card/rom orientation
|
||||
sta bnkbyt1 for proper restoration when mli exits.
|
||||
lda $D000
|
||||
sta bnkbyt2
|
||||
lda ramin force ram card on
|
||||
lda ramin with write allowed
|
||||
jmp xdosmli
|
||||
|
||||
irqexit .EQ *-ofsG
|
||||
lda bankid determine state of ram card (ROM/RAM)
|
||||
|
||||
irqxit0 .EQ *-ofsG
|
||||
beq .2 branch if ram card enabled.
|
||||
bmi .1 branch if alternate $D000 enabled.
|
||||
|
||||
lsr determine if no ram card present.
|
||||
bcc .3 branch if rom only system.
|
||||
|
||||
lda romin1 enable rom
|
||||
bcs .3 always taken
|
||||
|
||||
.1 lda altram enable alternate $D000
|
||||
.2 lda #$01 preset bankid for rom.
|
||||
sta bankid (reset if ram card interrupt)
|
||||
.3 lda p8areg restore acc
|
||||
rti exit
|
||||
|
||||
irqent .EQ *-ofsG this entry only used when rom
|
||||
bit ramin was enabled at time of interrupt.
|
||||
bit ramin
|
||||
jmp irqrecev
|
||||
|
||||
bnkbyt1 .EQ *-ofsG
|
||||
.DA #0
|
||||
bnkbyt2 .EQ *-ofsG
|
||||
.DA #0
|
||||
.HS 00000000 pad to before $BFFA
|
||||
.DA #4 gsos compatibility byte ($BFFA)
|
||||
.DA #0 pad
|
||||
.DA #0 reserved
|
||||
.DA #0 version # of running interpreter
|
||||
.DA #0 preserved for System Utilities
|
||||
kversion .EQ *-ofsG kernal version
|
||||
.HS 23 represents release 2.0.3
|
||||
|
||||
* end of obj mli_1
|
||||
*--------------------------------------
|
||||
|
|
|
@ -5,69 +5,69 @@ NEW
|
|||
* this routine handles interrupts and is coded to reach 'lreset' precisely at
|
||||
* address $FFCB (ROM rts opcode) for rom switching to function.
|
||||
|
||||
lanirq .EQ *-ofsR2
|
||||
lanirq .EQ *-ofsR2
|
||||
|
||||
H2D9B pha $2D9B-2DFF moved to $FF9B-FFFF
|
||||
lda accsav
|
||||
sta oldacc
|
||||
pla
|
||||
sta accsav
|
||||
pla get status register from stack
|
||||
pha and put it back.
|
||||
and #$10 is it a break or interrupt?
|
||||
bne H2DC2 branch if break.
|
||||
lda $D000 get ram bankid (LC1 = $D8, LC2=$EE)
|
||||
eor #$D8 is the system active? ($D8)
|
||||
beq sysactv branch if it is
|
||||
lda #$FF
|
||||
sysactv sta bankid
|
||||
sta afbank
|
||||
lda #>aftirq setup return address
|
||||
pha
|
||||
lda #<aftirq
|
||||
pha
|
||||
lda #$04 status reg with interrupt flag set
|
||||
pha
|
||||
H2DC2 lda #>romirq setup ROM re-entry
|
||||
pha
|
||||
lda #<romirq
|
||||
pha
|
||||
gorom .EQ *-ofsR2
|
||||
sta romin hits ROM rts at $FFCB
|
||||
H2D9B pha $2D9B-2DFF moved to $FF9B-FFFF
|
||||
lda accsav
|
||||
sta oldacc
|
||||
pla
|
||||
sta accsav
|
||||
pla get status register from stack
|
||||
pha and put it back.
|
||||
and #$10 is it a break or interrupt?
|
||||
bne H2DC2 branch if break.
|
||||
lda $D000 get ram bankid (LC1 = $D8, LC2=$EE)
|
||||
eor #$D8 is the system active? ($D8)
|
||||
beq sysactv branch if it is
|
||||
lda #$FF
|
||||
sysactv sta bankid
|
||||
sta afbank
|
||||
lda /aftirq setup return address
|
||||
pha
|
||||
lda #aftirq
|
||||
pha
|
||||
lda #$04 status reg with interrupt flag set
|
||||
pha
|
||||
H2DC2 lda /romirq setup ROM re-entry
|
||||
pha
|
||||
lda #romirq
|
||||
pha
|
||||
gorom .EQ *-ofsR2
|
||||
sta romin hits ROM rts at $FFCB
|
||||
|
||||
* 'lreset' address must = $FFCB for rom switch i/o to work
|
||||
|
||||
lreset .EQ *-ofsR2
|
||||
lda rreset+1
|
||||
pha
|
||||
lda rreset
|
||||
pha
|
||||
jmp gorom
|
||||
rreset .EQ *-ofsR2
|
||||
dc I2'resetv-1' rts to resetv
|
||||
fix45 .EQ *-ofsR2
|
||||
sta p8areg A register savearea
|
||||
lda oldacc
|
||||
sta accsav
|
||||
lda ramin read/write RAM bank 1
|
||||
lda ramin
|
||||
lda afbank
|
||||
jmp irqxit0
|
||||
stypfx .EQ *-ofsR2 fix appletalk PFI bug
|
||||
sty newpfxptr
|
||||
sty preflag prefix flag
|
||||
rts
|
||||
stapfx .EQ *-ofsR2
|
||||
sta newpfxptr
|
||||
sta preflag
|
||||
rts
|
||||
lreset .EQ *-ofsR2
|
||||
lda rreset+1
|
||||
pha
|
||||
lda rreset
|
||||
pha
|
||||
jmp gorom
|
||||
rreset .EQ *-ofsR2
|
||||
.DA resetv-1 rts to resetv
|
||||
fix45 .EQ *-ofsR2
|
||||
sta p8areg A register savearea
|
||||
lda oldacc
|
||||
sta accsav
|
||||
lda ramin read/write RAM bank 1
|
||||
lda ramin
|
||||
lda afbank
|
||||
jmp irqxit0
|
||||
stypfx .EQ *-ofsR2 fix appletalk PFI bug
|
||||
sty newpfxptr
|
||||
sty preflag prefix flag
|
||||
rts
|
||||
stapfx .EQ *-ofsR2
|
||||
sta newpfxptr
|
||||
sta preflag
|
||||
rts
|
||||
|
||||
* these 3 vectors hard-coded into processor
|
||||
|
||||
.DA nmivect' nmi handler
|
||||
.DA lreset' reset handler
|
||||
irqv .EQ *-ofsR2
|
||||
dc i2'lanirq' irq handler
|
||||
.DA nmivect nmi handler
|
||||
.DA lreset reset handler
|
||||
irqv .EQ *-ofsR2
|
||||
.DA lanirq irq handler
|
||||
|
||||
* end of obj mli_3
|
||||
*--------------------------------------
|
||||
|
|
|
@ -421,7 +421,7 @@ H2367 .DA #$01' relocation table. 1=move src to ZP.Ds
|
|||
.DA MLI' globals
|
||||
.DA $0100' in one page
|
||||
.DA H2E00'
|
||||
.DA #00' 0=clear buffers $D700-$DDFF
|
||||
.HS 00 0=clear buffers $D700-$DDFF
|
||||
.DA pathbuf
|
||||
.DA xdosorg-pathbuf'
|
||||
.DA #$01'
|
||||
|
@ -444,7 +444,7 @@ rlclk64 .DA #$01' relocation table. 1=move src to ZP.Ds
|
|||
.DA tclk_in'
|
||||
.DA H2F69-tclock_0'
|
||||
.DA tclk_in'
|
||||
.DA #00'
|
||||
.HS 00
|
||||
dc h'C1C1'
|
||||
clock64 .DA #$00'
|
||||
.DA #FF' done
|
||||
|
@ -507,16 +507,16 @@ H23F0 .DA #$1A length of message
|
|||
|
||||
gfi_list .EQ *-ofsL
|
||||
.DA #0A'
|
||||
dc i2'atinitname'
|
||||
dc h'00'
|
||||
.DA atinitname'
|
||||
.HS 00
|
||||
gfi_type .EQ *-ofsL
|
||||
dc h'00000000'
|
||||
.DA #0000000000000000'
|
||||
.DA #0000'
|
||||
.HS 0000
|
||||
atopen .EQ *-ofsL parms to open 'atinit'
|
||||
dc h'03'
|
||||
dc i2'atinitname'
|
||||
dc i2'iobuf' i/o buffer
|
||||
.DA atinitname'
|
||||
.DA iobuf' i/o buffer
|
||||
dc h'01' ref# hard coded since no other files
|
||||
atinitname .EQ *-ofsL
|
||||
.DA #06' length of name
|
||||
|
@ -616,7 +616,7 @@ H24C8 jsr MLI close interpreter file
|
|||
H24DF lda romin enable ROM
|
||||
jmp sysentry go run interpreter
|
||||
cflag .EQ *-ofsL
|
||||
.DA #00' set if a //c.
|
||||
.HS 00 set if a //c.
|
||||
nointrp .EQ *-ofsL no interpreter found,
|
||||
jsr MLI so quit.
|
||||
.DA #$65'
|
||||
|
@ -646,11 +646,11 @@ iomess .EQ *-ofsL
|
|||
dc c'** Unable to load'
|
||||
dc c' X.System *********'
|
||||
ierlen .EQ *-ofsL
|
||||
.DA #00'
|
||||
.HS 00
|
||||
opparm .EQ *-ofsL parms for open call
|
||||
dc h'03'
|
||||
dc i2'PrefixBuf'
|
||||
dc i2'iobuf'
|
||||
.DA PrefixBuf'
|
||||
.DA iobuf'
|
||||
dc h'01'
|
||||
efparm .EQ *-ofsL parms for get eof call
|
||||
dc h'02'
|
||||
|
@ -660,19 +660,19 @@ eof .EQ *-ofsL
|
|||
rdparm .EQ *-ofsL parms for read call
|
||||
dc h'04'
|
||||
dc h'01'
|
||||
dc i2'sysentry'
|
||||
.DA sysentry'
|
||||
rdlen .EQ *-ofsL
|
||||
.DA #0000'
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
.HS 0000
|
||||
clparm .EQ *-ofsL parms for close call
|
||||
dc h'01'
|
||||
dc h'00'
|
||||
.HS 00
|
||||
quitparm .EQ *-ofsL parms for quit call
|
||||
dc h'04'
|
||||
dc h'00'
|
||||
.DA #0000'
|
||||
dc h'00'
|
||||
dc h'0000'
|
||||
.HS 00
|
||||
.HS 0000
|
||||
.HS 00
|
||||
.HS 0000
|
||||
iterp .EQ *-ofsL interpreter suffix that is required
|
||||
dc c'.SYSTEM'
|
||||
|
||||
|
@ -1140,11 +1140,11 @@ pscall jsr $0000 self modifying code
|
|||
* and report true # of devices attached
|
||||
|
||||
jsr spvect status of Cocoon
|
||||
.DA #00'
|
||||
.HS 00
|
||||
.DA spcparms' ignore any errors.
|
||||
H28B1 stz statunit set unit# = 0
|
||||
jsr spvect call to get the device count.
|
||||
.DA #00' this is a status call
|
||||
.HS 00 this is a status call
|
||||
.DA spcparms'
|
||||
lda numdev2
|
||||
beq donesp no devices, so done.
|
||||
|
@ -1235,7 +1235,7 @@ H291F jsr H29EB is there a smartport device here?
|
|||
jsr H28E8 set up device attributes
|
||||
stz statunit
|
||||
jsr spvect do a status call on smartport itself
|
||||
.DA #00'
|
||||
.HS 00
|
||||
.DA spcparms'
|
||||
lda numdev2 # of devices on smartport
|
||||
cmp #$03
|
||||
|
@ -1256,7 +1256,7 @@ H295B cmp driveradr have we done all units in this slot?
|
|||
bcs H2974 yes, skip to next slot.
|
||||
sta statunit store the unit#.
|
||||
jsr spvect do status call
|
||||
.DA #00'
|
||||
.HS 00
|
||||
.DA spcparms'
|
||||
lda numdev2 is this a block device?
|
||||
bmi mount yes, so mount it.
|
||||
|
@ -1585,20 +1585,20 @@ H2B89 and #$03
|
|||
|
||||
* relocation table contains length of each opcode in 2-bit groups
|
||||
|
||||
opcodln .DA #0928193C0A280D3C'
|
||||
.DA #0B2A193F0A280D3C'
|
||||
.DA #0928193F0A280D3C'
|
||||
.DA #0928193F0A280D3C'
|
||||
.DA #082A113F0A2A1D0C'
|
||||
.DA #2A2A193F0A2A1D3F'
|
||||
.DA #0A2A193F0A280D3C'
|
||||
.DA #0A2A193F0A280D3C'
|
||||
opcodln .HS 0928193C0A280D3C
|
||||
.HS 0B2A193F0A280D3C
|
||||
.HS 0928193F0A280D3C
|
||||
.HS 0928193F0A280D3C
|
||||
.HS 082A113F0A2A1D0C
|
||||
.HS 2A2A193F0A2A1D3F
|
||||
.HS 0A2A193F0A280D3C
|
||||
.HS 0A2A193F0A280D3C
|
||||
|
||||
wsize .DA #$00'
|
||||
sgcnt .DA #$00'
|
||||
limlo .DA #0000000000000000'
|
||||
limhi .DA #0000000000000000'
|
||||
ofset .DA #0000000000000000'
|
||||
wsize .HS 00
|
||||
sgcnt .HS 00
|
||||
limlo .HS 0000000000000000
|
||||
limhi .HS 0000000000000000
|
||||
ofset .HS 0000000000000000
|
||||
|
||||
* patch to gsos vectors so error is returned for os calls - rev note #101
|
||||
|
||||
|
|
|
@ -4,88 +4,88 @@ NEW
|
|||
* /RAM driver (main bank portion)
|
||||
* origin = $FF00
|
||||
|
||||
ofsR2 .EQ lcsrc-lcdest offset from ram driver org
|
||||
ofsR2 .EQ lcsrc-lcdest offset from ram driver org
|
||||
|
||||
lcsrc cld no decimal.
|
||||
ldx #$0B save 13 bytes of parms
|
||||
H2D03 lda A1L,x
|
||||
sta a1l1,x
|
||||
dex
|
||||
bpl H2D03
|
||||
ldx #$01
|
||||
H2D0D lda passit,x save xfer vectors
|
||||
sta sp1,x
|
||||
dex
|
||||
bpl H2D0D
|
||||
lda A4L get command.
|
||||
beq stat 0 = status
|
||||
cmp #$04 check for command too high.
|
||||
bcs ioerr if it is, i/o error
|
||||
eor #$03
|
||||
sta A4L 0=format, 2=read, 1=write
|
||||
beq format
|
||||
ldy bloknml+1 check for large block number.
|
||||
bne ioerr too big.
|
||||
lda bloknml block #
|
||||
bmi ioerr largest block number is $7F
|
||||
lcsrc cld no decimal.
|
||||
ldx #$0B save 13 bytes of parms
|
||||
H2D03 lda A1L,x
|
||||
sta a1l1,x
|
||||
dex
|
||||
bpl H2D03
|
||||
ldx #$01
|
||||
H2D0D lda passit,x save xfer vectors
|
||||
sta sp1,x
|
||||
dex
|
||||
bpl H2D0D
|
||||
lda A4L get command.
|
||||
beq stat 0 = status
|
||||
cmp #$04 check for command too high.
|
||||
bcs ioerr if it is, i/o error
|
||||
eor #$03
|
||||
sta A4L 0=format, 2=read, 1=write
|
||||
beq format
|
||||
ldy bloknml+1 check for large block number.
|
||||
bne ioerr too big.
|
||||
lda bloknml block #
|
||||
bmi ioerr largest block number is $7F
|
||||
|
||||
* at this point, control is passed to the code in the alternate 64k.
|
||||
* it it used for read, write and format. after the request is completed,
|
||||
* control is passed back to 'noerr'.
|
||||
|
||||
format lda #<ramdest card entry point
|
||||
sta passit
|
||||
lda #>ramdest
|
||||
gocard .EQ *-ofsR2 also used by 'mainwrt'
|
||||
sta passit+1
|
||||
sec direction ram -> card
|
||||
clv start with original zero page
|
||||
jmp xfer transfer control
|
||||
ioerr lda #$27
|
||||
bne H2D41
|
||||
lda #$2B write protect error.
|
||||
H2D41 sec flags error
|
||||
bcs H2D47
|
||||
noerr .EQ *-ofsR2
|
||||
stat lda #$00
|
||||
clc
|
||||
H2D47 php save status
|
||||
pha and error code.
|
||||
ldx #$0B restore 13 byes of parms
|
||||
H2D4B lda a1l1,x
|
||||
sta A1L,x
|
||||
dex
|
||||
bpl H2D4B
|
||||
lda sp1 restore xfer parms.
|
||||
bit $6060 addr $FF58 must = rts ($60) as in ROM
|
||||
sta passit
|
||||
lda sp1+1
|
||||
sta passit+1
|
||||
pla restore error code
|
||||
plp and status.
|
||||
rts
|
||||
format lda #ramdest card entry point
|
||||
sta passit
|
||||
lda /ramdest
|
||||
gocard .EQ *-ofsR2 also used by 'mainwrt'
|
||||
sta passit+1
|
||||
sec direction ram -> card
|
||||
clv start with original zero page
|
||||
jmp xfer transfer control
|
||||
ioerr lda #$27
|
||||
bne H2D41
|
||||
lda #$2B write protect error.
|
||||
H2D41 sec flags error
|
||||
bcs H2D47
|
||||
noerr .EQ *-ofsR2
|
||||
stat lda #$00
|
||||
clc
|
||||
H2D47 php save status
|
||||
pha and error code.
|
||||
ldx #$0B restore 13 byes of parms
|
||||
H2D4B lda a1l1,x
|
||||
sta A1L,x
|
||||
dex
|
||||
bpl H2D4B
|
||||
lda sp1 restore xfer parms.
|
||||
bit $6060 addr $FF58 must = rts ($60) as in ROM
|
||||
sta passit
|
||||
lda sp1+1
|
||||
sta passit+1
|
||||
pla restore error code
|
||||
plp and status.
|
||||
rts
|
||||
mainwrt .EQ *-ofsR2 transfer data to card.
|
||||
sta wrcardram write to alt 48K
|
||||
ldy #$00
|
||||
H2D6A lda (A1L),y pointers set in card by 'setptr'
|
||||
sta (A4L),y
|
||||
lda (A2L),y
|
||||
sta (A3L),y
|
||||
dey
|
||||
bne H2D6A
|
||||
sta wrmainram write to main 48K.
|
||||
lda #<donewrt done writing card
|
||||
sta passit
|
||||
lda #>donewrt
|
||||
jmp gocard
|
||||
sp1 .EQ *-ofsR2
|
||||
.DA #0000'
|
||||
a1l1 .EQ *-ofsR2 13 bytes of storage
|
||||
sta wrcardram write to alt 48K
|
||||
ldy #$00
|
||||
H2D6A lda (A1L),y pointers set in card by 'setptr'
|
||||
sta (A4L),y
|
||||
lda (A2L),y
|
||||
sta (A3L),y
|
||||
dey
|
||||
bne H2D6A
|
||||
sta wrmainram write to main 48K.
|
||||
lda #donewrt done writing card
|
||||
sta passit
|
||||
lda /donewrt
|
||||
jmp gocard
|
||||
sp1 .EQ *-ofsR2
|
||||
.HS 0000
|
||||
a1l1 .EQ *-ofsR2 13 bytes of storage
|
||||
|
||||
* end of obj ram_2
|
||||
|
||||
r2_end .EQ *
|
||||
ds $D9B-(r2_end-H2000) fill to lanirq ($FF9B see note below)
|
||||
r2_end .EQ *
|
||||
.BS $D9B-(r2_end-H2000) fill to lanirq ($FF9B see note below)
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/PRODOS.203/PRODOS.S.RAM
|
||||
|
|
|
@ -35,9 +35,9 @@ RAM_1 .BS $2C80-*
|
|||
lda /lcdest
|
||||
sta drivertbl2+7
|
||||
|
||||
inc numdevs count (-1) active devices
|
||||
ldx numdevs
|
||||
lda #$BF unit num of /RAM
|
||||
inc numdevs count (-1) active devices
|
||||
ldx numdevs
|
||||
lda #$BF unit num of /RAM
|
||||
sta devlist,x
|
||||
rts end of obj ram_1
|
||||
|
||||
|
|
|
@ -227,7 +227,7 @@ L525E cmp #$11 if <=17 then done
|
|||
sbc #$11 else block=block-17.
|
||||
inx iteration count.
|
||||
bpl L525E should branch always
|
||||
.DA #00' otherwise crash !!!
|
||||
.HS 00 otherwise crash !!!
|
||||
L5268 tay remainder in y
|
||||
|
||||
* if remainder is 1 then it's an index block:
|
||||
|
@ -287,58 +287,57 @@ L52B1 lda (A4L),y (pointer set by setptr)
|
|||
bpl L52B1
|
||||
jmp exitcard
|
||||
|
||||
formatflg .EQ *-ofsR0
|
||||
.DA #00' not formatted yet
|
||||
tcmd .EQ *-ofsR0
|
||||
dc h'00' command
|
||||
dc h'00' unit (not used)
|
||||
R2L .EQ *-ofsR0
|
||||
dc h'00' R2 = user buffer
|
||||
R2H .EQ *-ofsR0
|
||||
dc h'00'
|
||||
R01 .EQ *-ofsR0
|
||||
dc h'00' page requested
|
||||
BITMAP .EQ *-ofsR0
|
||||
dc h'00FFFFFF' blocks 0-7 used
|
||||
.DA #FFFFFFFF'
|
||||
dc h'FFFFFFFF'
|
||||
.DA #FFFFFFFE'
|
||||
VDIR .EQ *-ofsR0 start of vdir.
|
||||
dc h'F3' storage type = F, name length = 3
|
||||
msb off
|
||||
dc c'RAM'
|
||||
access .EQ *-ofsR0
|
||||
.DA #C3' destroy, rename, read enabled
|
||||
dc h'27' entry length
|
||||
dc h'0D'
|
||||
dc h'0000'
|
||||
dc h'0300' block 3
|
||||
dc h'7F' 128 blocks
|
||||
formatflg .EQ *-ofsR0
|
||||
.HS 00 not formatted yet
|
||||
tcmd .EQ *-ofsR0
|
||||
.HS 00 command
|
||||
.HS 00 unit (not used)
|
||||
R2L .EQ *-ofsR0
|
||||
.HS 00 R2 = user buffer
|
||||
R2H .EQ *-ofsR0
|
||||
.HS 00
|
||||
R01 .EQ *-ofsR0
|
||||
.HS 00 page requested
|
||||
BITMAP .EQ *-ofsR0
|
||||
.HS 00FFFFFF blocks 0-7 used
|
||||
.HS FFFFFFFF
|
||||
.HS FFFFFFFF
|
||||
.HS FFFFFFFE
|
||||
VDIR .EQ *-ofsR0 start of vdir.
|
||||
.HS F3 storage type = F, name length = 3
|
||||
.AS "RAM"
|
||||
access .EQ *-ofsR0
|
||||
.DA #C3 destroy, rename, read enabled
|
||||
.HS 27 entry length
|
||||
.HS 0D
|
||||
.HS 0000
|
||||
.HS 0300 block 3
|
||||
.HS 7F 128 blocks
|
||||
|
||||
exitcard .EQ *-ofsR0
|
||||
lda ramin restore language card
|
||||
lda ramin
|
||||
pla get 80store
|
||||
bpl L52EA 80store wasn't on
|
||||
sta store80on enable 80store
|
||||
L52EA jmp bypass jump around passit
|
||||
passit .EQ *-ofsR0
|
||||
.DA #0000'
|
||||
bypass .EQ *-ofsR0
|
||||
lda #<noerr set up return to noerr
|
||||
sta passit
|
||||
lda #>noerr
|
||||
ex1 .EQ *-ofsR0
|
||||
sta passit+1 also used by blockwrite
|
||||
clc transfer card to main
|
||||
clv use standard zeropage/stack
|
||||
jmp xfer jmp back from language card.
|
||||
exitcard .EQ *-ofsR0
|
||||
lda ramin restore language card
|
||||
lda ramin
|
||||
pla get 80store
|
||||
bpl L52EA 80store wasn't on
|
||||
sta store80on enable 80store
|
||||
L52EA jmp bypass jump around passit
|
||||
passit .EQ *-ofsR0
|
||||
.HS 0000
|
||||
bypass .EQ *-ofsR0
|
||||
lda #noerr set up return to noerr
|
||||
sta passit
|
||||
lda /noerr
|
||||
ex1 .EQ *-ofsR0
|
||||
sta passit+1 also used by blockwrite
|
||||
clc transfer card to main
|
||||
clv use standard zeropage/stack
|
||||
jmp xfer jmp back from language card.
|
||||
|
||||
* NOTE: the previous section of code MUST NOT use $3FE or $3FF
|
||||
* since the interrupt vector must go there if aux interrupts
|
||||
* are to be used. no room for expansion here !!
|
||||
|
||||
.DA #0000' $3FE-$3FF
|
||||
.HS 0000 $3FE-$3FF
|
||||
|
||||
* end of obj ram_0
|
||||
*--------------------------------------
|
||||
|
|
|
@ -261,57 +261,57 @@ L5C0B jsr prntmsg
|
|||
dsp1msgs .EQ *-ofsS
|
||||
dsp1msg0 .EQ *-ofsS
|
||||
dc c'ENTER PREFIX (PRESS "RETURN" TO ACCEPT)'
|
||||
.DA #00'
|
||||
.HS 00
|
||||
disp1msg .EQ *-ofsS
|
||||
dc c'ENTER PATHNAME OF NEXT APPLICATION'
|
||||
.DA #00'
|
||||
.HS 00
|
||||
dsp1err1 .EQ *-ofsS
|
||||
.DA #87'
|
||||
dc c'NOT A TYPE "SYS" FILE'
|
||||
.DA #00'
|
||||
.HS 00
|
||||
dsp1err2 .EQ *-ofsS
|
||||
.DA #87'
|
||||
dc c'I/O ERROR '
|
||||
.DA #00'
|
||||
.HS 00
|
||||
dsp1err3 .EQ *-ofsS
|
||||
.DA #87'
|
||||
dc c'FILE/PATH NOT FOUND '
|
||||
.DA #00'
|
||||
.HS 00
|
||||
dsp1info .EQ *-ofsS get file info parms
|
||||
.DA #0A' 10 parameters
|
||||
dc i2'PrefixBuf' pathname buffer
|
||||
.DA PrefixBuf' pathname buffer
|
||||
dsp1acess .EQ *-ofsS
|
||||
dc h'00' access
|
||||
.HS 00 access
|
||||
dsp1type .EQ *-ofsS
|
||||
dc h'00' file type
|
||||
.HS 00 file type
|
||||
ds 13 the rest are unimportant
|
||||
dsp1open .EQ *-ofsS open file parms
|
||||
dc h'03' 3 parameters for open
|
||||
dc i2'PrefixBuf' pathname buffer
|
||||
dc i2'fbuf' fcb buffer
|
||||
.DA PrefixBuf' pathname buffer
|
||||
.DA fbuf' fcb buffer
|
||||
dsp1refn .EQ *-ofsS
|
||||
dc h'00' reference #
|
||||
.HS 00 reference #
|
||||
dsp1cls .EQ *-ofsS close file parms
|
||||
.DA #01' 1 parameter for close
|
||||
dsp1cln .EQ *-ofsS
|
||||
dc h'00' reference #
|
||||
.HS 00 reference #
|
||||
dsp1read .EQ *-ofsS
|
||||
dc h'04' 4 parameters for read
|
||||
dsp1rdn .EQ *-ofsS
|
||||
dc h'00' reference #
|
||||
dc i2'sysentry' .SYS load address
|
||||
.HS 00 reference #
|
||||
.DA sysentry' .SYS load address
|
||||
dsp1cnt .EQ *-ofsS
|
||||
dc h'0000' byte count
|
||||
.DA #0000'
|
||||
.HS 0000 byte count
|
||||
.HS 0000
|
||||
dsp1eof .EQ *-ofsS get eof parms
|
||||
dc h'02' 2 parameters
|
||||
dsp1eofn .EQ *-ofsS
|
||||
dc h'00' reference #
|
||||
.HS 00 reference #
|
||||
dsp1eofb .EQ *-ofsS
|
||||
dc h'000000' 3 byte eof
|
||||
dsp1pfx .EQ *-ofsS get/set prefix parms
|
||||
.DA #01' 1 parameter
|
||||
dc i2'PrefixBuf' prefix buffer
|
||||
.DA PrefixBuf' prefix buffer
|
||||
|
||||
disp1end .EQ *
|
||||
ds $300-(disp1end-disp1obj) fill to page boundary
|
||||
|
|
|
@ -126,7 +126,7 @@ L5DD8 adc #$04 add 4 and put in
|
|||
jsr MLI call mli
|
||||
.DA #$CE' set mark
|
||||
.DA #smparms' parameters address = $0060
|
||||
dc h'00'
|
||||
.HS 00
|
||||
bcs L5DB3 error
|
||||
jsr doread
|
||||
bcs L5DB3 error.
|
||||
|
@ -390,38 +390,38 @@ fldrmsg .EQ *-ofsB
|
|||
dc c'XY' folder characters
|
||||
dc h'18' disable mousetext
|
||||
dc h'0E' normal control code
|
||||
dc h'00'
|
||||
.HS 00
|
||||
op_parms .EQ *-ofsB open parameters
|
||||
.DA #03' 3 parms
|
||||
dc i2'PrefixBuf' pathname
|
||||
dc i2'op_buf' file buffer
|
||||
.DA PrefixBuf' pathname
|
||||
.DA op_buf' file buffer
|
||||
op_refn .EQ *-ofsB
|
||||
dc h'00' reference number
|
||||
.HS 00 reference number
|
||||
cl_parms .EQ *-ofsB close parameters
|
||||
dc h'01' 1 parm
|
||||
dc h'00' reference number.
|
||||
.HS 00 reference number.
|
||||
ol_parms .EQ *-ofsB online parameters
|
||||
dc h'02' 2 parms
|
||||
ol_unit .EQ *-ofsB
|
||||
dc h'60' unit number, default = s6, d1
|
||||
dc i2'PrefixBuf+1' data buffer
|
||||
.DA PrefixBuf+1' data buffer
|
||||
pf_parms .EQ *-ofsB set prefix parameters
|
||||
.DA #01' one parm
|
||||
dc i2'PrefixBuf' pathname
|
||||
.DA PrefixBuf' pathname
|
||||
rd_parms .EQ *-ofsB read parameters
|
||||
.DA #04' 4 parms
|
||||
rd_refn .EQ *-ofsB
|
||||
dc h'01' reference number
|
||||
dc i2'sysentry' data buffer
|
||||
.DA sysentry' data buffer
|
||||
|
||||
* these last 2 parms (4 bytes) may extend past $300 length limit since
|
||||
* the request count is set prior to using the parm block and the transfer
|
||||
* count isn't used at all (except by prodos)
|
||||
* dc h'0000' requested length
|
||||
* dc h'0000' actual length
|
||||
* .HS 0000 requested length
|
||||
* .HS 0000 actual length
|
||||
|
||||
dhdr_len .EQ *-ofsB directory header length
|
||||
dc h'00' (actually uses 2 bytes)
|
||||
.HS 00 (actually uses 2 bytes)
|
||||
|
||||
* end of obj sel_1
|
||||
*--------------------------------------
|
||||
|
|
|
@ -13,15 +13,16 @@ NEW
|
|||
* (as other replacement quit code is supposed to do) because GQuit checks
|
||||
* this to see if this version of quit code is available.
|
||||
|
||||
ofsQ .EQ GQdisp-dispadr offset to GQuit dispatcher org
|
||||
.OP 65816
|
||||
|
||||
msb off
|
||||
GQdisp lda ramin read/write LC bank 1
|
||||
clc
|
||||
xce 16 bit native mode.
|
||||
jmp >P8QUIT go to GQuit.
|
||||
.DA #0000000000' offset to paragraph boundary.
|
||||
dc c'GQ' id bytes so GQuit can identify this
|
||||
ofsQ .EQ GQdisp-dispadr offset to GQuit dispatcher org
|
||||
|
||||
GQdisp lda ramin read/write LC bank 1
|
||||
clc
|
||||
xce 16 bit native mode.
|
||||
jmp >P8QUIT go to GQuit.
|
||||
.DA #0000000000 offset to paragraph boundary.
|
||||
.AS "GQ" id bytes so GQuit can identify this
|
||||
|
||||
* load application
|
||||
*
|
||||
|
@ -40,125 +41,126 @@ GQdisp lda ramin read/write LC bank 1
|
|||
* so in case of an error setting the P8 prefix, it can be displayed in the
|
||||
* error message.
|
||||
|
||||
SHORT M 8 bit accumulator
|
||||
LONGI ON
|
||||
pha save the switch status.
|
||||
ldx #inbuf point to passed prefix.
|
||||
jsr copyvol copy the name into the buffer.
|
||||
pla retrieve the switch status
|
||||
SHORT M 8 bit accumulator
|
||||
LONGI ON
|
||||
pha save the switch status.
|
||||
ldx #inbuf point to passed prefix.
|
||||
jsr copyvol copy the name into the buffer.
|
||||
pla retrieve the switch status
|
||||
|
||||
* go into emulation mode to load and run Prodos 8 application
|
||||
|
||||
sec
|
||||
xce 8 bit emulation mode
|
||||
ora #$00 switching from P16 to P8 ?
|
||||
beq L602D no.
|
||||
sec
|
||||
xce 8 bit emulation mode
|
||||
ora #$00 switching from P16 to P8 ?
|
||||
beq L602D no.
|
||||
|
||||
* switching from P16 to P8 so pass prefix 0 from P16 to the P8 prefix. the
|
||||
* prefix is passed at $00/0200 by GQuit.
|
||||
|
||||
L6020 jsr MLI set prefix
|
||||
.DA #$C6'
|
||||
.DA pfxparms'
|
||||
bcc L602D if prefix ok.
|
||||
jsr gqerror error handler.
|
||||
bra L6020 try again
|
||||
L6020 jsr MLI set prefix
|
||||
.DA #$C6
|
||||
.DA pfxparms
|
||||
bcc L602D if prefix ok.
|
||||
jsr gqerror error handler.
|
||||
bra L6020 try again
|
||||
|
||||
* load application at $2000
|
||||
|
||||
L602D xce native mode (carry clear)
|
||||
LONG I 16 bit regs, 8 bit acc.
|
||||
lda PrefixBuf+1 is the application name
|
||||
cmp #$2F a complete pathname ?
|
||||
bne L603D no, use prefix as volume name
|
||||
ldx #PrefixBuf else use the application name.
|
||||
jsr copyvol copy the volume name to buffer.
|
||||
L603D sec back to emulation mode.
|
||||
xce
|
||||
L603F jsr MLI open the application file
|
||||
.DA #$C8'
|
||||
.DA opnparms'
|
||||
bcc L604C if open ok.
|
||||
jsr gqerror handle error.
|
||||
bra L603F try again.
|
||||
L604C lda oprefnum copy ref number to parameter lists
|
||||
sta eofrefn
|
||||
sta rdrefnum
|
||||
sta closeref
|
||||
L602D xce native mode (carry clear)
|
||||
LONG I 16 bit regs, 8 bit acc.
|
||||
lda PrefixBuf+1 is the application name
|
||||
cmp #$2F a complete pathname ?
|
||||
bne L603D no, use prefix as volume name
|
||||
ldx #PrefixBuf else use the application name.
|
||||
jsr copyvol copy the volume name to buffer.
|
||||
L603D sec back to emulation mode.
|
||||
xce
|
||||
L603F jsr MLI open the application file
|
||||
.DA #$C8
|
||||
.DA opnparms
|
||||
bcc L604C if open ok.
|
||||
jsr gqerror handle error.
|
||||
bra L603F try again.
|
||||
L604C lda oprefnum copy ref number to parameter lists
|
||||
sta eofrefn
|
||||
sta rdrefnum
|
||||
sta closeref
|
||||
|
||||
* do a geteof call for how many bytes to read
|
||||
|
||||
L6058 jsr MLI get eof
|
||||
.DA #$D1'
|
||||
.DA eofparms'
|
||||
bcc L6065 eof ok.
|
||||
jsr gqerror handle error.
|
||||
bra L6058 try again.
|
||||
L6058 jsr MLI get eof
|
||||
.DA #$D1
|
||||
.DA eofparms
|
||||
bcc L6065 eof ok.
|
||||
jsr gqerror handle error.
|
||||
bra L6058 try again.
|
||||
|
||||
* store the size of the file in the read parameter list
|
||||
|
||||
L6065 lda eofval
|
||||
sta rdcount
|
||||
lda eofval+1
|
||||
sta rdcount+1
|
||||
L6071 jsr MLI read
|
||||
.DA #$CA'
|
||||
.DA readparm'
|
||||
bcc L607E read ok
|
||||
jsr gqerror
|
||||
bra L6071
|
||||
L607E jsr MLI close
|
||||
.DA #$CC'
|
||||
.DA closeprm'
|
||||
bcc L608B close ok
|
||||
jsr gqerror
|
||||
bra L607E
|
||||
L608B jsr dolaunch check for possible 2nd pathname.
|
||||
bne L6099 if none then run program
|
||||
jsr ckfordrv else make sure the file is online.
|
||||
bcc L6099 if so then run the program.
|
||||
lda #$45 volume not found error.
|
||||
bra L60AB
|
||||
L6099 lda romin enable ROM
|
||||
jmp sysentry execute the system application
|
||||
gqerror .EQ *-ofsQ
|
||||
clc
|
||||
xce 16 bit native mode
|
||||
LONG I,M
|
||||
jsr mountvol mount volume.
|
||||
bcs L60AB if error.
|
||||
sec back to emulation mode.
|
||||
xce
|
||||
rts
|
||||
L6065 lda eofval
|
||||
sta rdcount
|
||||
lda eofval+1
|
||||
sta rdcount+1
|
||||
L6071 jsr MLI read
|
||||
.DA #$CA
|
||||
.DA readparm
|
||||
bcc L607E read ok
|
||||
jsr gqerror
|
||||
bra L6071
|
||||
L607E jsr MLI close
|
||||
.DA #$CC
|
||||
.DA closeprm
|
||||
bcc L608B close ok
|
||||
jsr gqerror
|
||||
bra L607E
|
||||
L608B jsr dolaunch check for possible 2nd pathname.
|
||||
bne L6099 if none then run program
|
||||
jsr ckfordrv else make sure the file is online.
|
||||
bcc L6099 if so then run the program.
|
||||
lda #$45 volume not found error.
|
||||
bra L60AB
|
||||
L6099 lda romin enable ROM
|
||||
jmp sysentry execute the system application
|
||||
|
||||
gqerror .EQ *-ofsQ
|
||||
clc
|
||||
xce 16 bit native mode
|
||||
LONG I,M
|
||||
jsr mountvol mount volume.
|
||||
bcs L60AB if error.
|
||||
sec back to emulation mode.
|
||||
xce
|
||||
rts
|
||||
|
||||
* generate a fatal error while running under Prodos 8.
|
||||
* on input, acc = error code. this routine does not return.
|
||||
|
||||
L60AB clc native mode
|
||||
xce
|
||||
LONG I,M
|
||||
and #$00FF mask off high byte of error code.
|
||||
pha put on stack for IntMath tool call.
|
||||
pea $0000 errval>>16
|
||||
pea errval push address of string buffer.
|
||||
pea $0004 make string 4 digits long.
|
||||
_Int2Hex convert value to hex string.
|
||||
pha make space for return value.
|
||||
pea $0000 quitstr1>>16
|
||||
pea quitstr1 push first error message address
|
||||
pea $0000 quitstr2>>16
|
||||
pea quitstr2 push second error message address
|
||||
pea $0000 button1>>16
|
||||
pea button1 push first button text address
|
||||
pea $0000 quitbtn2>>16
|
||||
pea quitbtn2 push 2nd button text address (null)
|
||||
_TLTextMountVolume make the dialog box
|
||||
pla retrieve button press (not used)
|
||||
sec emulation mode
|
||||
xce
|
||||
jsr MLI quit back to GQuit
|
||||
.DA #$65'
|
||||
.DA quitparms'
|
||||
L60AB clc native mode
|
||||
xce
|
||||
LONG I,M
|
||||
and #$00FF mask off high byte of error code.
|
||||
pha put on stack for IntMath tool call.
|
||||
pea $0000 errval>>16
|
||||
pea errval push address of string buffer.
|
||||
pea $0004 make string 4 digits long.
|
||||
_Int2Hex convert value to hex string.
|
||||
pha make space for return value.
|
||||
pea $0000 quitstr1>>16
|
||||
pea quitstr1 push first error message address
|
||||
pea $0000 quitstr2>>16
|
||||
pea quitstr2 push second error message address
|
||||
pea $0000 button1>>16
|
||||
pea button1 push first button text address
|
||||
pea $0000 quitbtn2>>16
|
||||
pea quitbtn2 push 2nd button text address (null)
|
||||
_TLTextMountVolume make the dialog box
|
||||
pla retrieve button press (not used)
|
||||
sec emulation mode
|
||||
xce
|
||||
jsr MLI quit back to GQuit
|
||||
.DA #$65
|
||||
.DA quitparms
|
||||
|
||||
* p8 mount volume
|
||||
*
|
||||
|
@ -166,80 +168,81 @@ L60AB clc native mode
|
|||
* on exit: carry clear if mount volume displayed and 'return' was pressed.
|
||||
* carry set if no window displayed or if had window and 'esc' pressed.
|
||||
|
||||
mountvol .EQ *-ofsQ
|
||||
ldy #$0000 volbuf>>16
|
||||
ldx #volbuf set up pointer to volume name.
|
||||
mountvol .EQ *-ofsQ
|
||||
ldy #$0000 volbuf>>16
|
||||
ldx #volbuf set up pointer to volume name.
|
||||
|
||||
* if error is 'volume not found' or 'no disk in drive' then display the
|
||||
* Mount Volume window, otherwise return with carry set.
|
||||
|
||||
and #$00FF mask just in case.
|
||||
cmp #$0045 volume not found ?
|
||||
beq L6101 yes
|
||||
cmp #$002F no disk in drive ?
|
||||
beq L6101 yes
|
||||
sec indicate error not handled.
|
||||
rts return with error code still in acc.
|
||||
L6101 pha save error code in case esc pressed.
|
||||
phy pointer to volume name.
|
||||
phx
|
||||
tsc
|
||||
phd save D reg.
|
||||
tcd point D reg at stack.
|
||||
lda [$01] get length byte and leading separator.
|
||||
dec a don't count leading separator.
|
||||
xba then swap the bytes so the volume name
|
||||
sta [$01] doesn't cpntain the separator.
|
||||
pha room for result.
|
||||
pea $0000 mountmsg>>16
|
||||
pea mountmsg
|
||||
phy hi word of pointer to volume name.
|
||||
inx skip separator.
|
||||
phx lo word of pointer to volume name.
|
||||
pea $0000 button1>>16
|
||||
pea button1 'Return'
|
||||
pea $0000 button2>>16
|
||||
pea button2 'Escape'
|
||||
_TLTextMountVolume
|
||||
lda [$01] restore first 2 bytes of vilume name
|
||||
xba back to their original positions
|
||||
inc a and values.
|
||||
sta [$01]
|
||||
pla which button: 1=Return 2=Escape.
|
||||
pld restore D reg.
|
||||
plx pull volume name pointer off stack
|
||||
plx
|
||||
cmp #$0001 which button was pressed ?
|
||||
bne L613C if Escape pressed.
|
||||
clc indicate Return was pressed.
|
||||
pla pull original error code off stack.
|
||||
rts return with carry clear.
|
||||
L613C sec indicate Escape was pressed.
|
||||
pla restore error code.
|
||||
rts return with carry set.
|
||||
and #$00FF mask just in case.
|
||||
cmp #$0045 volume not found ?
|
||||
beq L6101 yes
|
||||
cmp #$002F no disk in drive ?
|
||||
beq L6101 yes
|
||||
sec indicate error not handled.
|
||||
rts return with error code still in acc.
|
||||
|
||||
L6101 pha save error code in case esc pressed.
|
||||
phy pointer to volume name.
|
||||
phx
|
||||
tsc
|
||||
phd save D reg.
|
||||
tcd point D reg at stack.
|
||||
lda [$01] get length byte and leading separator.
|
||||
dec don't count leading separator.
|
||||
xba then swap the bytes so the volume name
|
||||
sta [$01] doesn't cpntain the separator.
|
||||
pha room for result.
|
||||
pea $0000 mountmsg>>16
|
||||
pea mountmsg
|
||||
phy hi word of pointer to volume name.
|
||||
inx skip separator.
|
||||
phx lo word of pointer to volume name.
|
||||
pea $0000 button1>>16
|
||||
pea button1 'Return'
|
||||
pea $0000 button2>>16
|
||||
pea button2 'Escape'
|
||||
_TLTextMountVolume
|
||||
lda [$01] restore first 2 bytes of vilume name
|
||||
xba back to their original positions
|
||||
inc and values.
|
||||
sta [$01]
|
||||
pla which button: 1=Return 2=Escape.
|
||||
pld restore D reg.
|
||||
plx pull volume name pointer off stack
|
||||
plx
|
||||
cmp #$0001 which button was pressed ?
|
||||
bne L613C if Escape pressed.
|
||||
clc indicate Return was pressed.
|
||||
pla pull original error code off stack.
|
||||
rts return with carry clear.
|
||||
L613C sec indicate Escape was pressed.
|
||||
pla restore error code.
|
||||
rts return with carry set.
|
||||
|
||||
* copy the volume name from the given pathname to the volume name buffer.
|
||||
*
|
||||
* inputs: x = length byte of complete pathname containing volume name.
|
||||
* output: volume name is stored in volbuf.
|
||||
|
||||
copyvol .EQ *-ofsQ
|
||||
lda |1,x get the first slash
|
||||
sta volbuf+1
|
||||
ldy #$0002 initialize the length count.
|
||||
LONGI OFF
|
||||
LONGA OFF
|
||||
L6148 lda |2,x now copy the volume name up to
|
||||
cmp #$2F the separating slash.
|
||||
beq L6156
|
||||
sta volbuf,y
|
||||
inx
|
||||
iny
|
||||
bra L6148
|
||||
L6156 dey fix character count.
|
||||
tya length.
|
||||
sta volbuf store the resultant string length.
|
||||
rts
|
||||
copyvol .EQ *-ofsQ
|
||||
lda |1,x get the first slash
|
||||
sta volbuf+1
|
||||
ldy #$0002 initialize the length count.
|
||||
LONGI OFF
|
||||
LONGA OFF
|
||||
L6148 lda |2,x now copy the volume name up to
|
||||
cmp #$2F the separating slash.
|
||||
beq L6156
|
||||
sta volbuf,y
|
||||
inx
|
||||
iny
|
||||
bra L6148
|
||||
L6156 dey fix character count.
|
||||
tya length.
|
||||
sta volbuf store the resultant string length.
|
||||
rts
|
||||
|
||||
* translate a filename message from the message center to the currently
|
||||
* launching P8 application if it can accept a second filename. If found,
|
||||
|
@ -247,109 +250,109 @@ L6156 dey fix character count.
|
|||
* on exit, the z-flag is set if a filename was correctly passed to the
|
||||
* application elst the z-flag is clear if it couldn't be done.
|
||||
|
||||
dolaunch .EQ *-ofsQ
|
||||
lda sysentry does the app start with a jump ?
|
||||
cmp #$4C
|
||||
bne L616F no, doesn't follow the convention.
|
||||
lda #$EE check for the signature bytes.
|
||||
cmp sysentry+3
|
||||
bne L616F 1st one doesn't match, skip it.
|
||||
cmp sysentry+4
|
||||
beq L6170 both match, go get a filename message.
|
||||
L616F rts just return to launch the app.
|
||||
L6170 lda #$FF put flag conditioning value on
|
||||
pha the stack (assume error).
|
||||
clc native 16-bit mode.
|
||||
xce
|
||||
LONG I,M
|
||||
pha make room on stack for user id.
|
||||
_MMStartUp start up the memory manager.
|
||||
pla get the user id and
|
||||
pha leave it on the stack.
|
||||
pha
|
||||
pha make room on stack for new handle.
|
||||
pea $0000
|
||||
pea $000A get a 10 byte block of memory.
|
||||
pha put user id on stack.
|
||||
pea $0000 totally unrestricted block.
|
||||
pha LocationPtr (not used)
|
||||
pha
|
||||
_NewHandle go get the block of memory.
|
||||
pla get the handle from the stack.
|
||||
plx
|
||||
bcs L620A branch if error, no memory available.
|
||||
phx leave the handle on the stack.
|
||||
pha
|
||||
pea $0002 'get' a message.
|
||||
pea $0001 get a type 1 (filename) message.
|
||||
phx put the message handle on the stack
|
||||
pha (still in acc and x regs)
|
||||
_MessageCenter
|
||||
bcs L6203 branch if no message.
|
||||
pha leave 4 bytes free on stack
|
||||
pha (will be used as a direct page pointer)
|
||||
tsc get the stack pointer.
|
||||
phd save current direct register.
|
||||
inc a point to new direct page space.
|
||||
tcd make a new direct page.
|
||||
lda [$04] de-reference the handle.
|
||||
sta $00
|
||||
ldy #$0002
|
||||
lda [$04],y
|
||||
sta $02
|
||||
ldy #$0006 get the message command.
|
||||
lda [$00],y
|
||||
bne bad_msg if print, then skip it.
|
||||
lda $00 adjust pointer to filename string.
|
||||
clc
|
||||
adc #$0008
|
||||
sta $00
|
||||
bcc L61D1
|
||||
inc $02
|
||||
L61D1 lda [$00] get the length of the string.
|
||||
and #$00FF mask off high (leaving just the length)
|
||||
SHORT M 8 bit accumulator
|
||||
cmp sysentry+5 check against length of app buffer.
|
||||
beq L61DF if equal then continue with move.
|
||||
bcs bad_msg if too long then bad message.
|
||||
L61DF tay string length.
|
||||
L61E0 lda [$00],y get a character.
|
||||
sta sysentry+6,y store it in the app's filename buffer
|
||||
sta inbuf,y and in prefix buffer.
|
||||
dey
|
||||
bpl L61E0
|
||||
lda #$00 change flag conditioning value on stack
|
||||
sta $0D,s to indicate a filename is passed.
|
||||
bad_msg LONG M 16-bit acc.
|
||||
pld restore direct register.
|
||||
pla fix stack because handle and userid
|
||||
pla still on stack.
|
||||
pea $0003 now delete the message (done with it).
|
||||
pea $0001 message type 1.
|
||||
pha garbage handle (not used).
|
||||
pha
|
||||
_MessageCenter go delete the message.
|
||||
L6203 _DisposeHandle throw away message (handle is on stack)
|
||||
L620A _MMShutDown shutdown the memory manager (userid is
|
||||
sec on stack).
|
||||
xce back to emulation mode.
|
||||
LONGA OFF
|
||||
pla condition z-flag with value on stack.
|
||||
bne L6231 then done.
|
||||
ldx inbuf get length of pathname.
|
||||
lda #$2F look for slash.
|
||||
L621B cmp inbuf,x
|
||||
beq L6225 when found, set prefix.
|
||||
dex
|
||||
bne L621B
|
||||
bra L6231 if no slash, just skip it.
|
||||
L6225 dex don't include trailing slash.
|
||||
stx inbuf set new length.
|
||||
jsr MLI set the P8 prefix.
|
||||
.DA #$C6'
|
||||
.DA pfxparms'
|
||||
lda #$00 set z-flag
|
||||
L6231 rts and go launch the app.
|
||||
dolaunch .EQ *-ofsQ
|
||||
lda sysentry does the app start with a jump ?
|
||||
cmp #$4C
|
||||
bne L616F no, doesn't follow the convention.
|
||||
lda #$EE check for the signature bytes.
|
||||
cmp sysentry+3
|
||||
bne L616F 1st one doesn't match, skip it.
|
||||
cmp sysentry+4
|
||||
beq L6170 both match, go get a filename message.
|
||||
L616F rts just return to launch the app.
|
||||
L6170 lda #$FF put flag conditioning value on
|
||||
pha the stack (assume error).
|
||||
clc native 16-bit mode.
|
||||
xce
|
||||
LONG I,M
|
||||
pha make room on stack for user id.
|
||||
_MMStartUp start up the memory manager.
|
||||
pla get the user id and
|
||||
pha leave it on the stack.
|
||||
pha
|
||||
pha make room on stack for new handle.
|
||||
pea $0000
|
||||
pea $000A get a 10 byte block of memory.
|
||||
pha put user id on stack.
|
||||
pea $0000 totally unrestricted block.
|
||||
pha LocationPtr (not used)
|
||||
pha
|
||||
_NewHandle go get the block of memory.
|
||||
pla get the handle from the stack.
|
||||
plx
|
||||
bcs L620A branch if error, no memory available.
|
||||
phx leave the handle on the stack.
|
||||
pha
|
||||
pea $0002 'get' a message.
|
||||
pea $0001 get a type 1 (filename) message.
|
||||
phx put the message handle on the stack
|
||||
pha (still in acc and x regs)
|
||||
_MessageCenter
|
||||
bcs L6203 branch if no message.
|
||||
pha leave 4 bytes free on stack
|
||||
pha (will be used as a direct page pointer)
|
||||
tsc get the stack pointer.
|
||||
phd save current direct register.
|
||||
inc a point to new direct page space.
|
||||
tcd make a new direct page.
|
||||
lda [$04] de-reference the handle.
|
||||
sta $00
|
||||
ldy #$0002
|
||||
lda [$04],y
|
||||
sta $02
|
||||
ldy #$0006 get the message command.
|
||||
lda [$00],y
|
||||
bne bad_msg if print, then skip it.
|
||||
lda $00 adjust pointer to filename string.
|
||||
clc
|
||||
adc #$0008
|
||||
sta $00
|
||||
bcc L61D1
|
||||
inc $02
|
||||
L61D1 lda [$00] get the length of the string.
|
||||
and #$00FF mask off high (leaving just the length)
|
||||
SHORT M 8 bit accumulator
|
||||
cmp sysentry+5 check against length of app buffer.
|
||||
beq L61DF if equal then continue with move.
|
||||
bcs bad_msg if too long then bad message.
|
||||
L61DF tay string length.
|
||||
L61E0 lda [$00],y get a character.
|
||||
sta sysentry+6,y store it in the app's filename buffer
|
||||
sta inbuf,y and in prefix buffer.
|
||||
dey
|
||||
bpl L61E0
|
||||
lda #$00 change flag conditioning value on stack
|
||||
sta $0D,s to indicate a filename is passed.
|
||||
bad_msg LONG M 16-bit acc.
|
||||
pld restore direct register.
|
||||
pla fix stack because handle and userid
|
||||
pla still on stack.
|
||||
pea $0003 now delete the message (done with it).
|
||||
pea $0001 message type 1.
|
||||
pha garbage handle (not used).
|
||||
pha
|
||||
_MessageCenter go delete the message.
|
||||
L6203 _DisposeHandle throw away message (handle is on stack)
|
||||
L620A _MMShutDown shutdown the memory manager (userid is
|
||||
sec on stack).
|
||||
xce back to emulation mode.
|
||||
LONGA OFF
|
||||
pla condition z-flag with value on stack.
|
||||
bne L6231 then done.
|
||||
ldx inbuf get length of pathname.
|
||||
lda #$2F look for slash.
|
||||
L621B cmp inbuf,x
|
||||
beq L6225 when found, set prefix.
|
||||
dex
|
||||
bne L621B
|
||||
bra L6231 if no slash, just skip it.
|
||||
L6225 dex don't include trailing slash.
|
||||
stx inbuf set new length.
|
||||
jsr MLI set the P8 prefix.
|
||||
.DA #$C6
|
||||
.DA pfxparms
|
||||
lda #$00 set z-flag
|
||||
L6231 rts and go launch the app.
|
||||
|
||||
* check for disk volume
|
||||
*
|
||||
|
@ -357,107 +360,107 @@ L6231 rts and go launch the app.
|
|||
* carry clear = disk was found
|
||||
* carry set = disk not found
|
||||
|
||||
ckfordrv .EQ *-ofsQ
|
||||
clc native mode
|
||||
xce
|
||||
LONG I 16-bit regs, 8-bit acc.
|
||||
ldx #sysentry+6 point to pathname buffer.
|
||||
jsr copyvol copy volume name to pathname buffer.
|
||||
L623C sec emulation mode.
|
||||
xce
|
||||
jsr MLI get info on the volume.
|
||||
.DA #$C4'
|
||||
.DA gfiparms'
|
||||
bcc L6252 branch if volume found,
|
||||
clc (native mode)
|
||||
xce
|
||||
LONG I,M
|
||||
jsr mountvol else ask user to mount the volume.
|
||||
bcc L623C if <return> pressed, then try again.
|
||||
sec emulation mode.
|
||||
xce
|
||||
sec disk not found.
|
||||
L6252 rts
|
||||
ckfordrv .EQ *-ofsQ
|
||||
clc native mode
|
||||
xce
|
||||
LONG I 16-bit regs, 8-bit acc.
|
||||
ldx #sysentry+6 point to pathname buffer.
|
||||
jsr copyvol copy volume name to pathname buffer.
|
||||
.1 sec emulation mode.
|
||||
xce
|
||||
jsr MLI get info on the volume.
|
||||
.DA #$C4
|
||||
.DA gfiparms
|
||||
bcc .2 branch if volume found,
|
||||
clc (native mode)
|
||||
xce
|
||||
LONG I,M
|
||||
jsr mountvol else ask user to mount the volume.
|
||||
bcc .1 if <return> pressed, then try again.
|
||||
sec emulation mode.
|
||||
xce
|
||||
sec disk not found.
|
||||
.2 rts
|
||||
|
||||
* Prodos 8 parameter lists
|
||||
|
||||
pfxparms .EQ *-ofsQ set prefix parms.
|
||||
.DA #01' one parm.
|
||||
dc i2'inbuf' address of prefix.
|
||||
opnparms .EQ *-ofsQ open parms.
|
||||
dc h'03' 3 parms.
|
||||
dc i2'PrefixBuf' pathname
|
||||
dc i2'op_buf' i/o buffer
|
||||
oprefnum .EQ *-ofsQ
|
||||
dc h'00' reference #
|
||||
eofparms .EQ *-ofsQ
|
||||
.DA #02' 2 parms
|
||||
eofrefn .EQ *-ofsQ
|
||||
dc h'00' reference #
|
||||
eofval .EQ *-ofsQ
|
||||
dc h'000000' 3 byte eof value
|
||||
readparm .EQ *-ofsQ
|
||||
.DA #04' 4 parms
|
||||
rdrefnum .EQ *-ofsQ
|
||||
dc h'00' reference #
|
||||
dc i2'sysentry' read into $2000 (bank 0).
|
||||
rdcount .EQ *-ofsQ
|
||||
dc h'0000' # of bytes to read.
|
||||
dc h'0000' transfer count
|
||||
closeprm .EQ *-ofsQ
|
||||
dc h'01' 1 parm
|
||||
closeref .EQ *-ofsQ
|
||||
dc h'00' reference #
|
||||
quitparms .EQ *-ofsQ
|
||||
.DA #04' 4 parms.
|
||||
dc h'00' quit back to launcher (GQuit)
|
||||
dc h'0000'
|
||||
dc h'00'
|
||||
dc h'0000'
|
||||
gfiparms .EQ *-ofsQ get file info parms.
|
||||
.DA #0A' 10 parms
|
||||
dc i2'volbuf' volume buffer
|
||||
dc h'00' access
|
||||
dc h'00' file type
|
||||
dc h'0000' aux type
|
||||
dc h'00' storage type
|
||||
dc h'0000' blocks used
|
||||
.DA #0000' modification date
|
||||
dc h'0000' modification time
|
||||
dc h'0000' creation date
|
||||
.DA #0000' creation time
|
||||
pfxparms .EQ *-ofsQ set prefix parms.
|
||||
.DA #01 one parm.
|
||||
.DA inbuf address of prefix.
|
||||
opnparms .EQ *-ofsQ open parms.
|
||||
.DA #3 3 parms.
|
||||
.DA PrefixBuf pathname
|
||||
.DA op_buf i/o buffer
|
||||
oprefnum .EQ *-ofsQ
|
||||
.HS 00 reference #
|
||||
eofparms .EQ *-ofsQ
|
||||
.DA #02 2 parms
|
||||
eofrefn .EQ *-ofsQ
|
||||
.HS 00 reference #
|
||||
eofval .EQ *-ofsQ
|
||||
.HS 000000 3 byte eof value
|
||||
readparm .EQ *-ofsQ
|
||||
.DA #04 4 parms
|
||||
rdrefnum .EQ *-ofsQ
|
||||
.HS 00 reference #
|
||||
.DA sysentry read into $2000 (bank 0).
|
||||
rdcount .EQ *-ofsQ
|
||||
.HS 0000 # of bytes to read.
|
||||
.HS 0000 transfer count
|
||||
closeprm .EQ *-ofsQ
|
||||
.DA #1 1 parm
|
||||
closeref .EQ *-ofsQ
|
||||
.HS 00 reference #
|
||||
quitparms .EQ *-ofsQ
|
||||
.DA #04 4 parms.
|
||||
.HS 00 quit back to launcher (GQuit)
|
||||
.HS 0000
|
||||
.HS 00
|
||||
.HS 0000
|
||||
gfiparms .EQ *-ofsQ get file info parms.
|
||||
.DA #$0A 10 parms
|
||||
.DA volbuf volume buffer
|
||||
.DA #0 access
|
||||
.DA #0 file type
|
||||
.DA 0 aux type
|
||||
.DA #0 storage type
|
||||
.DA 0 blocks used
|
||||
.DA 0 modification date
|
||||
.DA 0 modification time
|
||||
.DA 0 creation date
|
||||
.DA 0 creation time
|
||||
|
||||
* messages for P8 fatal error. maximum length of message is 35 characters.
|
||||
* the error code will be displayed immediately after the final character.
|
||||
|
||||
quitstr1 .EQ *-ofsQ
|
||||
dc h'1B'
|
||||
dc c'Can''t run next application.'
|
||||
quitstr2 .EQ *-ofsQ
|
||||
dc h'14'
|
||||
dc c'ProDOS Error = $'
|
||||
errval .EQ *-ofsQ hex error code gets stored here
|
||||
dc c' '
|
||||
quitbtn2 .EQ *-ofsQ null string (no 2nd button)
|
||||
dc h'00'
|
||||
quitstr1 .EQ *-ofsQ
|
||||
.DA #$1B
|
||||
.AS "Can't run next application."
|
||||
quitstr2 .EQ *-ofsQ
|
||||
.DA #$14
|
||||
.AS "ProDOS Error = $"
|
||||
errval .EQ *-ofsQ hex error code gets stored here
|
||||
.AS " "
|
||||
quitbtn2 .EQ *-ofsQ null string (no 2nd button)
|
||||
.HS 00
|
||||
|
||||
* messages for P8 mount volume. maximum length of message is 35 characters.
|
||||
* the button labels must not be more than 16 characters.
|
||||
|
||||
mountmsg .EQ *-ofsQ
|
||||
dc h'17'
|
||||
dc c'Please insert the disk:'
|
||||
button1 .EQ *-ofsQ
|
||||
dc h'0D'
|
||||
dc c'Accept: '
|
||||
.DA #1B' mousetext on
|
||||
dc h'0F' inverse on
|
||||
dc h'4D' mousetext return
|
||||
dc h'0E' normal on
|
||||
dc h'18' mousetext off
|
||||
button2 .EQ *-ofsQ
|
||||
dc h'0B'
|
||||
dc c'Cancel: Esc'
|
||||
mountmsg .EQ *-ofsQ
|
||||
.DA #$17
|
||||
.AS "Please insert the disk:"
|
||||
button1 .EQ *-ofsQ
|
||||
.DA #$0D
|
||||
.AS "Accept: "
|
||||
.DA #$1B mousetext on
|
||||
.DA #$0F inverse on
|
||||
.DA #$4D mousetext return
|
||||
.DA #$0E normal on
|
||||
.DA #$18 mousetext off
|
||||
button2 .EQ *-ofsQ
|
||||
.DA #$0B
|
||||
.AS "Cancel: Esc"
|
||||
|
||||
* end of obj sel_2 (must be < GQdisp+$300)
|
||||
*--------------------------------------
|
||||
|
|
|
@ -6,83 +6,83 @@ NEW
|
|||
|
||||
* $2F00-2F7C moved to $D742
|
||||
|
||||
ofsT .EQ tclock_0-tclk_in offset to Thunderclock org
|
||||
ofsT .EQ tclock_0-tclk_in offset to Thunderclock org
|
||||
|
||||
tclock_0 ldx clkslt clock slot = $C1.
|
||||
lda clkmode,x save current mode
|
||||
pha
|
||||
lda #$A3 send numeric mode byte to Thunderclock
|
||||
jsr wttcp
|
||||
clkslt .EQ *-ofsT+2 points to $C1.
|
||||
jsr rdtcp read month, day of week, day of month
|
||||
clc and time into input buffer.
|
||||
ldx #$04 index for 5 values.
|
||||
ldy #$0C read minutes 1st, month last.
|
||||
H2F14 lda inbuf,y convert values to binary.
|
||||
and #$07 no value > 5 decimal.
|
||||
sta pcl 'tens' place value
|
||||
asl a multiply by 10
|
||||
asl a
|
||||
adc pcl
|
||||
asl a
|
||||
adc inbuf+1,y add to ascii 'ones' place
|
||||
sec and subtract out the ascii
|
||||
sbc #$B0
|
||||
sta pcl,x save converted value.
|
||||
dey index to next lowest value
|
||||
dey
|
||||
dey
|
||||
dex are there more values?
|
||||
bpl H2F14 if yes.
|
||||
tay contains month
|
||||
lsr a
|
||||
ror a
|
||||
ror a
|
||||
ror a high bit of month held in carry
|
||||
ora A1L
|
||||
sta p8date save low value of date.
|
||||
php save high bit of month.
|
||||
and #$1F isolate day.
|
||||
adc tdays-1,y (y = month)
|
||||
bcc H2F42 branch if not Sept 13 thru 30th
|
||||
adc #$03 adj for mod 7 when day > 256
|
||||
H2F42 sec
|
||||
H2F43 sbc #$07
|
||||
bcs H2F43 loop until < 0.
|
||||
adc #$07 make it in the range of 0-6.
|
||||
sbc pch the delta provides years offset.
|
||||
bcs H2F4F branch if positive
|
||||
adc #$07 else make it positive again.
|
||||
H2F4F tay
|
||||
lda yradj,y look up year
|
||||
plp and combine it with hi bit of month
|
||||
rol a
|
||||
sta p8date+1 P8 date
|
||||
lda A1L+1 hour
|
||||
sta p8time+1 P8 time
|
||||
lda A2L minute
|
||||
sta p8time
|
||||
pla restore previous mode.
|
||||
ldx clkslt clock slot = $C1
|
||||
sta clkmode,x
|
||||
H2F69 rts
|
||||
tclock_0 ldx clkslt clock slot = $C1.
|
||||
lda clkmode,x save current mode
|
||||
pha
|
||||
lda #$A3 send numeric mode byte to Thunderclock
|
||||
jsr wttcp
|
||||
clkslt .EQ *-ofsT+2 points to $C1.
|
||||
jsr rdtcp read month, day of week, day of month
|
||||
clc and time into input buffer.
|
||||
ldx #$04 index for 5 values.
|
||||
ldy #$0C read minutes 1st, month last.
|
||||
.1 lda inbuf,y convert values to binary.
|
||||
and #$07 no value > 5 decimal.
|
||||
sta pcl 'tens' place value
|
||||
asl multiply by 10
|
||||
asl
|
||||
adc pcl
|
||||
asl
|
||||
adc inbuf+1,y add to ascii 'ones' place
|
||||
sec and subtract out the ascii
|
||||
sbc #$B0
|
||||
sta pcl,x save converted value.
|
||||
dey index to next lowest value
|
||||
dey
|
||||
dey
|
||||
dex are there more values?
|
||||
bpl .1 if yes.
|
||||
tay contains month
|
||||
lsr
|
||||
ror
|
||||
ror
|
||||
ror high bit of month held in carry
|
||||
ora A1L
|
||||
sta p8date save low value of date.
|
||||
php save high bit of month.
|
||||
and #$1F isolate day.
|
||||
adc tdays-1,y (y = month)
|
||||
bcc .2 branch if not Sept 13 thru 30th
|
||||
adc #$03 adj for mod 7 when day > 256
|
||||
.2 sec
|
||||
.3 sbc #$07
|
||||
bcs .3 loop until < 0.
|
||||
adc #$07 make it in the range of 0-6.
|
||||
sbc pch the delta provides years offset.
|
||||
bcs .4 branch if positive
|
||||
adc #$07 else make it positive again.
|
||||
.4 tay
|
||||
lda yradj,y look up year
|
||||
plp and combine it with hi bit of month
|
||||
rol
|
||||
sta p8date+1 P8 date
|
||||
lda A1L+1 hour
|
||||
sta p8time+1 P8 time
|
||||
lda A2L minute
|
||||
sta p8time
|
||||
pla restore previous mode.
|
||||
ldx clkslt clock slot = $C1
|
||||
sta clkmode,x
|
||||
H2F69 rts
|
||||
|
||||
* this table contains entries for the cumulative # of days in a year,
|
||||
* one entry for each month. the values are modulo 256.
|
||||
|
||||
tdays .EQ *-ofsT
|
||||
.DA #00' January
|
||||
dc h'1F' February
|
||||
dc h'3B' March
|
||||
dc h'5A' April
|
||||
dc h'78' May
|
||||
dc h'97' June
|
||||
dc h'B5' July
|
||||
dc h'D3' August
|
||||
.DA #F2' September
|
||||
dc h'14' October (MOD 256)
|
||||
dc h'33' November
|
||||
dc h'51' December
|
||||
tdays .EQ *-ofsT
|
||||
.DA #$00 January
|
||||
.DA #$1F February
|
||||
.DA #$3B March
|
||||
.DA #$5A April
|
||||
.DA #$78 May
|
||||
.DA #$97 June
|
||||
.DA #$B5 July
|
||||
.DA #$D3 August
|
||||
.DA #$F2 September
|
||||
.DA #$14 October (MOD 256)
|
||||
.DA #$33 November
|
||||
.DA #$51 December
|
||||
|
||||
* the following table is used to look up the current year, based on
|
||||
* the current month, day and day of week. The 1st entry corresponds
|
||||
|
@ -90,16 +90,16 @@ tdays .EQ *-ofsT
|
|||
* is the year which January 1st is Sunday, and so on backwards thru
|
||||
* the days of the week.
|
||||
|
||||
yradj .EQ *-ofsT
|
||||
dc h'60' Monday
|
||||
dc h'5F' Sunday
|
||||
dc h'5E' Saturday
|
||||
dc h'5D' Friday
|
||||
.DA #62' Thursday
|
||||
dc h'61' Wednesday
|
||||
dc h'60' Tuesday
|
||||
tclk_end .EQ * end of obj tclock_0.
|
||||
dc h'000000' pad
|
||||
yradj .EQ *-ofsT
|
||||
.DA #$60 Monday
|
||||
.DA #$5F Sunday
|
||||
.DA #$5E Saturday
|
||||
.DA #$5D Friday
|
||||
.DA #$62 Thursday
|
||||
.DA #$61 Wednesday
|
||||
.DA #$60 Tuesday
|
||||
tclk_end .EQ * end of obj tclock_0.
|
||||
.HS 000000 pad
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/PRODOS.203/PRODOS.S.TCLK
|
||||
|
|
|
@ -263,9 +263,9 @@ irqdev .EQ *-ofsX
|
|||
sta mslot slot being accessed.
|
||||
H31DD jmp irqexit do necessary bank switches and return.
|
||||
irqflag .EQ *-ofsX
|
||||
.DA #00' 0 = old roms. 1 = new roms.
|
||||
.HS 00 0 = old roms. 1 = new roms.
|
||||
irqcount .EQ *-ofsX
|
||||
dc h'00' # of unclaimed interrupts.
|
||||
.HS 00 # of unclaimed interrupts.
|
||||
svstack .EQ *-ofsX temporary save area from stack
|
||||
dc h'0000000000000000'
|
||||
.DA #0000000000000000'
|
||||
|
@ -4022,8 +4022,8 @@ L4F3F lda buf-1,x from prodos parameters
|
|||
sp_vector .EQ *-ofsX smartport call
|
||||
jsr $0000 (entry address gets modified)
|
||||
cmdnum .EQ *-ofsX
|
||||
dc h'00' command #
|
||||
dc i2'statparms'
|
||||
.HS 00 command #
|
||||
.DA statparms'
|
||||
bcs L4F6E
|
||||
ldx cmdnum status call ?
|
||||
bne L4F6E no...
|
||||
|
@ -4049,9 +4049,9 @@ spvecthi .EQ *-ofsX storage for high byte of smartport
|
|||
statparms .EQ *-ofsX # of parms (always 3 except format)
|
||||
dc h'03'
|
||||
sp_unitnum .EQ *-ofsX
|
||||
.DA #00' unit number
|
||||
.HS 00 unit number
|
||||
sp_bufptr .EQ *-ofsX
|
||||
dc h'0000' data buffer
|
||||
.HS 0000 data buffer
|
||||
dc h'000000' block number (3 bytes)
|
||||
|
||||
* data tables
|
||||
|
@ -4072,26 +4072,26 @@ pcntbl .EQ *-ofsX parameter counts for the calls
|
|||
* command table
|
||||
|
||||
cmdtable .EQ *-ofsX
|
||||
dc i2'create' create
|
||||
dc i2'destroy' destroy
|
||||
.DA create' create
|
||||
.DA destroy' destroy
|
||||
.DA rename' rename
|
||||
dc i2'setinfo' setinfo
|
||||
dc i2'getinfo' getinfo
|
||||
dc i2'online' online
|
||||
.DA setinfo' setinfo
|
||||
.DA getinfo' getinfo
|
||||
.DA online' online
|
||||
.DA setprefx' set prefix
|
||||
dc i2'getprefx' get prefix
|
||||
dc i2'openf' open
|
||||
dc i2'newline' newline
|
||||
.DA getprefx' get prefix
|
||||
.DA openf' open
|
||||
.DA newline' newline
|
||||
.DA readf' read
|
||||
dc i2'writef' write
|
||||
dc i2'closef' close
|
||||
dc i2'flushf' flush
|
||||
.DA writef' write
|
||||
.DA closef' close
|
||||
.DA flushf' flush
|
||||
.DA setmark' set mark
|
||||
dc i2'getmark' get mark
|
||||
dc i2'seteof' seteof
|
||||
dc i2'geteof' geteof
|
||||
.DA getmark' get mark
|
||||
.DA seteof' seteof
|
||||
.DA geteof' geteof
|
||||
.DA setbuf' setbuf
|
||||
dc i2'getbuf' getbuf
|
||||
.DA getbuf' getbuf
|
||||
|
||||
* corresponding command function bytes
|
||||
|
||||
|
@ -4109,7 +4109,7 @@ pass .EQ *-ofsX
|
|||
xdosver .EQ *-ofsX
|
||||
dc h'00'
|
||||
compat .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
dc h'C3270D000000'
|
||||
rootstuf .EQ *-ofsX
|
||||
.DA #0F02000400000800'
|
||||
|
@ -4132,63 +4132,63 @@ deathmsg .EQ *-ofsX
|
|||
* variables in the file control block and temporary directory.
|
||||
|
||||
own_blk .EQ *-ofsX
|
||||
.DA #0000'
|
||||
.HS 0000
|
||||
own_ent .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
own_len .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
h_credt .EQ *-ofsX
|
||||
dc h'0000' directory creation date
|
||||
dc h'0000' directory creation time
|
||||
.DA #00' version under which this dir created
|
||||
dc h'00' earliest version that it's compatible
|
||||
.HS 0000 directory creation date
|
||||
.HS 0000 directory creation time
|
||||
.HS 00 version under which this dir created
|
||||
.HS 00 earliest version that it's compatible
|
||||
h_attr .EQ *-ofsX attributes (protect bit, etc.)
|
||||
dc h'00'
|
||||
.HS 00
|
||||
h_entln .EQ *-ofsX length of each entry in this directory
|
||||
dc h'00'
|
||||
.HS 00
|
||||
h_maxent .EQ *-ofsX maximum number of entries per block
|
||||
dc h'00'
|
||||
.HS 00
|
||||
h_fcnt .EQ *-ofsX current # of files in this directory
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
h_bmap .EQ *-ofsX address of first allocation bitmap
|
||||
.DA #0000'
|
||||
.HS 0000
|
||||
h_tblk .EQ *-ofsX total number of blocks on this unit
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
d_dev .EQ *-ofsX device number of this directory entry
|
||||
dc h'00'
|
||||
.HS 00
|
||||
d_head .EQ *-ofsX address of <sub> directory header
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
d_entblk .EQ *-ofsX address of block which contains entry
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
d_entnum .EQ *-ofsX entry number within block
|
||||
.DA #00'
|
||||
.HS 00
|
||||
d_stor .EQ *-ofsX
|
||||
dc h'0000000000000000' file name
|
||||
dc h'0000000000000000'
|
||||
d_filid .EQ *-ofsX user's identification byte
|
||||
.DA #00'
|
||||
.HS 00
|
||||
d_frst .EQ *-ofsX first block of file
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
d_usage .EQ *-ofsX # of blocks allocated to this file
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
d_eof .EQ *-ofsX current end of file marker
|
||||
dc h'000000'
|
||||
d_credt .EQ *-ofsX
|
||||
.DA #0000' file creation date
|
||||
dc h'0000' file creation time
|
||||
.HS 0000 file creation date
|
||||
.HS 0000 file creation time
|
||||
d_sosver .EQ *-ofsX sos version that created this file
|
||||
dc h'00'
|
||||
.HS 00
|
||||
d_comp .EQ *-ofsX backward version compatibility
|
||||
dc h'00'
|
||||
.HS 00
|
||||
d_attr .EQ *-ofsX attributes (protect, r/w, enable, etc.)
|
||||
dc h'00'
|
||||
.HS 00
|
||||
d_auxid .EQ *-ofsX user auxilliary identification
|
||||
.DA #0000'
|
||||
.HS 0000
|
||||
d_moddt .EQ *-ofsX
|
||||
dc h'0000' file's last modification date
|
||||
dc h'0000' file's last modification time
|
||||
.HS 0000 file's last modification date
|
||||
.HS 0000 file's last modification time
|
||||
d_dhdr .EQ *-ofsX file directory header block address
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
scrtch .EQ *-ofsX scratch area for
|
||||
.DA #00000000' allocation address conversion.
|
||||
oldeof .EQ *-ofsX temp used in r/w
|
||||
|
@ -4196,142 +4196,142 @@ oldeof .EQ *-ofsX temp used in r/w
|
|||
oldmark .EQ *-ofsX
|
||||
.DA #000000'
|
||||
xvcbptr .EQ *-ofsX used in 'cmpvcb' as a temp
|
||||
dc h'00'
|
||||
.HS 00
|
||||
vcbptr .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
fcbptr .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
fcbflg .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
reql .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
reqh .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
levels .EQ *-ofsX
|
||||
.DA #00'
|
||||
.HS 00
|
||||
totent .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
entcntl .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
entcnth .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
cntent .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
nofree .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
bmcnt .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
saptr .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
pathcnt .EQ *-ofsX
|
||||
.DA #00'
|
||||
.HS 00
|
||||
p_dev .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
p_blok .EQ *-ofsX
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
bmptr .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
basval .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
half .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
|
||||
* bitmap info tables
|
||||
|
||||
bmastat .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
bmadev .EQ *-ofsX
|
||||
.DA #00'
|
||||
.HS 00
|
||||
bmadadr .EQ *-ofsX
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
bmacmap .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
tposll .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
tposlh .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
tposhi .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
rwreql .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
rwreqh .EQ *-ofsX
|
||||
.DA #00'
|
||||
.HS 00
|
||||
nlchar .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
nlmask .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
ioaccess .EQ *-ofsX has a call been made to
|
||||
dc h'00' disk device handler ?
|
||||
.HS 00 disk device handler ?
|
||||
cmdtemp .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
bkbitflg .EQ *-ofsX used to set or clear backup bit
|
||||
dc h'00'
|
||||
.HS 00
|
||||
duplflag .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
vcbentry .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
|
||||
* xdos temporary variables
|
||||
|
||||
namcnt .EQ *-ofsX
|
||||
.DA #00'
|
||||
.HS 00
|
||||
rnptr .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
namptr .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
vnptr .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
prfxflg .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
cferr .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
|
||||
* deallocation temporary variables
|
||||
|
||||
firstbl .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
firstbh .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
stortyp .EQ *-ofsX
|
||||
.DA #00'
|
||||
.HS 00
|
||||
deblock .EQ *-ofsX
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
dtree .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
dsap .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
dseed .EQ *-ofsX
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
topdest .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
dtmpx .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
loklst .EQ *-ofsX look list of recognized device numbers
|
||||
dealbufl .EQ *-ofsX
|
||||
dc h'0000000000000000'
|
||||
.HS 0000000000000000
|
||||
dealbufh .EQ *-ofsX
|
||||
.DA #0000000000000000'
|
||||
.HS 0000000000000000
|
||||
cbytes .EQ *-ofsX
|
||||
.DA #0000'
|
||||
dc h'00' cbytes+2 must = 0
|
||||
.HS 0000
|
||||
.HS 00 cbytes+2 must = 0
|
||||
bufaddrl .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
bufaddrh .EQ *-ofsX
|
||||
dc h'00'
|
||||
.HS 00
|
||||
goadr .EQ *-ofsX
|
||||
dc h'0000'
|
||||
.HS 0000
|
||||
delflag .EQ *-ofsX used by 'detree' to know if called
|
||||
.DA #00' from delete (destroy).
|
||||
.HS 00 from delete (destroy).
|
||||
|
||||
* zero fill to page boundary - 3 ($FEFD). so that cortland flag stays
|
||||
* within page boundary.
|
||||
|
||||
dc h'00000000000000'
|
||||
dc h'0000000000'
|
||||
.HS 00000000000000
|
||||
.HS 0000000000
|
||||
|
||||
dc i2'calldisp'
|
||||
.DA calldisp
|
||||
cortflag .EQ *-ofsX cortland flag. 1 = Cortland system
|
||||
dc h'00' (must stay within page boundary)
|
||||
.HS 00 (must stay within page boundary)
|
||||
|
||||
* end of obj mli_2
|
||||
*--------------------------------------
|
||||
|
|
|
@ -1,225 +0,0 @@
|
|||
KEEP PRODOS
|
||||
MCOPY PRODOS.MAC
|
||||
|
||||
* disassembly of prodos version 2.0.3
|
||||
* can be compiled with the orca/m assembler
|
||||
* which produces an output file PRODOS (type = EXE)
|
||||
* address refs beginning with 'L' were generated by orca disassembler
|
||||
* address refs beginning with 'H' were added manually
|
||||
|
||||
* last edit: 01/24/13
|
||||
|
||||
* map of the object modules within prodos exe are as follows:
|
||||
|
||||
* $2000 mli_0 mli loader/relocator
|
||||
* $2C80 ram_1 installer for /RAM
|
||||
* $2D00 ram_2 /RAM driver in main lc
|
||||
* $2D9B mli_3 interrupts
|
||||
* $2E00 mli_1 global page
|
||||
* $2F00 tclock_0 Thunderclock driver
|
||||
* $2F80 cclock_0 Cortland clock driver
|
||||
* $3000 mli_2 xdos mli & block file manager
|
||||
* $5100 ram_0 /RAM driver in aux mem
|
||||
* $5300 xrw_0 disk core routines
|
||||
* $5A00 sel_0 dispatcher
|
||||
* $5D00 sel_1 enhanced quit code (Bird's Better Bye)
|
||||
* $6000 sel_2 GQuit dispatcher support
|
||||
|
||||
************************ IMPORTANT ************************
|
||||
* *
|
||||
* 1. In the language card area, the $D000 areas overlay. To *
|
||||
* determine which bank is active requires that the main bank *
|
||||
* has a CLD ($D8) at $D000 and the alternate bank does not. *
|
||||
* $D000 in ROM = $6F, LC bank1 = $D8, LC bank2 = $EE *
|
||||
* *
|
||||
* 2. Location $E000 is used to determine the state of ROM vs. *
|
||||
* language card. Therefore, the value of $E000 in the MLI *
|
||||
* and ROM must differ. *
|
||||
* *
|
||||
* 3. In the section MEMMGR, the routine CALLDISP must access *
|
||||
* the other $D000 bank so it MUST reside ABOVE $E000 in the *
|
||||
* language card area. *
|
||||
* *
|
||||
* 4. The Disk II routine xrwtot MUST reside on a page boundary *
|
||||
* to distinguish it from a ram-based driver. *
|
||||
* *
|
||||
* 5. In the /RAM driver ram3, the byte at $FF58 MUST be an rts *
|
||||
* ($60) so the routine JSR $FF58 to determine an I/O card's *
|
||||
* slot still works when the language card is switched in. *
|
||||
* *
|
||||
*****************************************************************
|
||||
|
||||
PRODOS START
|
||||
|
||||
* Predefined labels:
|
||||
|
||||
lookptr equ $0A
|
||||
idapple equ $0C model machine id
|
||||
idxl equ $10 general use 16 bit index pointer
|
||||
devid equ $12
|
||||
src equ $12
|
||||
dst equ $14
|
||||
cnt equ $16
|
||||
cde equ $18
|
||||
ecde equ $1A
|
||||
wndlft equ $20
|
||||
wndwdth equ $21
|
||||
wndtop equ $22
|
||||
wndbtm equ $23
|
||||
ch equ $24 cursor horizontal
|
||||
cv equ $25 cursor vertical
|
||||
invflg equ $32 inverse flag
|
||||
pcl equ $3A
|
||||
pch equ $3B
|
||||
A1L equ $3C
|
||||
A1H equ $3D
|
||||
A2L equ $3E
|
||||
A2H equ $3F
|
||||
A3L equ $40
|
||||
A4L equ $42
|
||||
unitnum equ $43
|
||||
buf equ $44 2-byte data buffer pointer which
|
||||
accsav equ $45 overlaps accsav (temp acc save byte)
|
||||
bloknml equ $46 used mostly as 16 bit block # pointer
|
||||
zpt equ $48 highly used zero page index pointer
|
||||
datptr equ $4A ptr to data area of buffer.
|
||||
sos equ $4C sos buffer pointer.
|
||||
usrbuf equ $4E data ptr in user buffer.
|
||||
|
||||
* zero page variables for Bird's Better Bye
|
||||
|
||||
smparms equ $60 set mark parms
|
||||
sm_refn equ $61 file reference number
|
||||
fpos_lo equ $62 new file position (3 bytes)
|
||||
fpos_mid equ $63
|
||||
fpos_hi equ $64
|
||||
lstpntr equ $65 device list pointer (16 bit)
|
||||
valcnt equ $67 name counter
|
||||
filecount equ $68 # of displayable files in directory
|
||||
namelen equ $69 length of filename
|
||||
gp_cnt equ $6A general purpose counter
|
||||
dlevel equ $6B directory level
|
||||
fnstore equ $6C filename storage pointer (16 bit)
|
||||
entlen equ $6E directory entry length
|
||||
entblk equ $6F directory entries/block
|
||||
filecnt equ $70 directory file count (16 bit)
|
||||
blkfl equ $72 block flag / file counter
|
||||
topname equ $73 index # of top name in display
|
||||
filetyps equ $74 128 byte table of filetypes
|
||||
|
||||
errnum equ $DE
|
||||
tst128 equ $0080 temp page 0 routine for memory test
|
||||
auxsp equ $0101
|
||||
ramdest equ $0200 load address for aux bank /RAM driver
|
||||
inbuf equ $0200 keyboard buffer
|
||||
pbuf equ $0280 prefix buffer
|
||||
p3vect equ $03F0 page 3 vectors (16 bytes)
|
||||
softev equ $03F2 RESET vector
|
||||
pwredup equ $03F4 power up byte
|
||||
nmivect equ $03FB nmi handler
|
||||
txtp2 equ $0400 test location for aux card
|
||||
vline10 equ $04A8 line 10 of display
|
||||
vmode equ $04FB video firmware operating mode
|
||||
vline11 equ $0528 line 11 of display
|
||||
clkmode equ $0538 clock mode
|
||||
ch80col equ $057B 80 column ch position
|
||||
vline12 equ $05A8 line 12 of display
|
||||
vline5 equ $0600 line 5 of display
|
||||
vline13 equ $0628 line 13 of display
|
||||
vline14 equ $06A8 line 14 of display
|
||||
vline23 equ $0750 line 23 of display
|
||||
vline16 equ $07A8 line 16 of display
|
||||
vline24 equ $07D0 line 24 of display
|
||||
mslot equ $07F8 slot being accessed
|
||||
lodintrp equ $0800
|
||||
dbuf equ $0C00 8 page directory buffer
|
||||
vblock1 equ $0E00 ramdisk directory block
|
||||
volbuf equ $0F00 volume buffer
|
||||
dispadr equ $1000 system death dispatcher run address
|
||||
iobuf equ $1400 i/o buffer
|
||||
fbuf equ $1800 FCB buffer
|
||||
op_buf equ $1C00 open file buffer (selector)
|
||||
sysentry equ $2000 .SYS file load address
|
||||
prodos8 equ $BF00 prodos MLI and global page
|
||||
kbd equ $C000 keyboard latch (read)
|
||||
store80off equ $C000 disable 80-col store (write)
|
||||
store80on equ $C001 enable 80-col store
|
||||
rdmainram equ $C002 read from main 48K
|
||||
rdcardram equ $C003 read from alt 48K
|
||||
wrmainram equ $C004 write to main 48K
|
||||
wrcardram equ $C005 write to alt 48K
|
||||
setstdzp equ $C008 use main zero page/stack
|
||||
setaltzp equ $C009 use alt zero page/stack
|
||||
int3rom equ $C00A enable internal slot 3 ROM
|
||||
slot3rom equ $C00B enable external slot 3 ROM
|
||||
clr80vid equ $C00C disable 80 col hardware
|
||||
clraltchar equ $C00E normal LC, flashing UC
|
||||
kbdstrobe equ $C010 turn off keypressed flag
|
||||
rd80col equ $C018 if 80-column store
|
||||
newvideo equ $C029 video mode select
|
||||
spkr equ $C030 click speaker
|
||||
txtset equ $C051 switch in text
|
||||
txtpage1 equ $C054 switch in text page 1
|
||||
txtpage2 equ $C055 switch in text page 2
|
||||
statereg equ $C068 memory state register
|
||||
phaseoff equ $C080 disk port
|
||||
romin1 equ $C081 read ROM/write RAM bank 2
|
||||
romin equ $C082 read ROM
|
||||
altram equ $C083 read/write RAM bank 2
|
||||
motoroff equ $C088 disk port
|
||||
motoron equ $C089 disk port
|
||||
drv0en equ $C08A disk port
|
||||
ramin equ $C08B read/write RAM bank 1
|
||||
q6l equ $C08C disk port
|
||||
q6h equ $C08D disk port
|
||||
q7l equ $C08E disk port
|
||||
q7h equ $C08F disk port
|
||||
rdtcp equ $C108 Thunderclock read entry
|
||||
wttcp equ $C10B Thunderclock write entry
|
||||
init80 equ $C300 init 80 col card
|
||||
slot3id1 equ $C305 slot 3 card id 1
|
||||
slot3id2 equ $C307 slot 3 card id 2
|
||||
slot3id3 equ $C30B slot 3 card id 3
|
||||
ext80col equ $C30C slot 3 80 col id
|
||||
auxmove equ $C311 move (3C)-(3E) to (42)
|
||||
xfer equ $C314
|
||||
slot3irq equ $C3FA slot 3 irq handler
|
||||
clrrom equ $CFFF switch out $C8 ROMs
|
||||
rwts equ $D000 disk ii driver in bank 1
|
||||
displc2 equ $D100 system death routine stored in bank 2
|
||||
pathbuf equ $D700 pathname buffer
|
||||
tclk_in equ $D742 clock driver in bank 2
|
||||
fcbbuf equ $D800 fcb buffer
|
||||
vcbbuf equ $D900 vcb buffer
|
||||
bmbuf equ $DA00 512 byte bitmap buffer
|
||||
gbuf equ $DC00 general purpose 512 byte block buffer
|
||||
xdosorg equ $DE00 xdos MLI in aux memory
|
||||
romirq equ $FA41 monitor irq entry
|
||||
breakv equ $FA59 monitor break vector
|
||||
resetv equ $FA62 monitor reset entry
|
||||
HFB1E equ $FB1E version check byte
|
||||
init equ $FB2F init text screen
|
||||
settxt equ $FB39 set text mode
|
||||
tabv equ $FB5B set vertical position
|
||||
setpwrc equ $FB6F create power-up byte
|
||||
version equ $FBB3 monitor ROM id byte
|
||||
zidbyte equ $FBC0 monitor ROM id byte
|
||||
bell1 equ $FBDD generate bell tone
|
||||
home equ $FC58 home cursor and clear screen
|
||||
clreol equ $FC9C clear to end of line
|
||||
rdkey equ $FD0C input char with cursor
|
||||
crout equ $FD8E issue carriage return
|
||||
cout equ $FDED output character
|
||||
idroutine equ $FE1F returns system info
|
||||
setinv equ $FE80 set inverse text mode
|
||||
setnorm equ $FE84 set normal text mode
|
||||
setkbd equ $FE89 reset input to keyboard
|
||||
setvid equ $FE93 reset output to screen
|
||||
lcdest equ $FF00 load address
|
||||
bell equ $FF3A output bell (ctl-G)
|
||||
oldrst equ $FF59 monitor reset entry
|
||||
* romrts equ $FFCB an rts location that must be in ROM
|
||||
P8QUIT equ $E0D000
|
||||
GSOS equ $E100A8
|
||||
GSOS2 equ $E100B0
|
||||
OS_BOOT equ $E100BD indicates O/S initially booted
|
Loading…
Reference in New Issue