Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-09-13 17:39:37 +02:00
parent e9beaf983c
commit 230fed8d88
18 changed files with 485 additions and 448 deletions

Binary file not shown.

View File

@ -31,8 +31,8 @@ ZPBufPtr2 .BS 2
bSkip2 .BS 1
Offset .BS 2
BufCnt .BS 2
SeekOfs .BS 4
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -114,14 +114,13 @@ CS.RUN
stx hBuf2
bra .1
.4 lda #$ff
bit bSkip1
.4 bit bSkip1
bmi .5
sta bSkip1
jsr CS.RUN.SEEK
bcs .9
sec
ror bSkip1
bra .1
.5 bit bSkip2
@ -130,6 +129,8 @@ CS.RUN
sta bSkip2
jsr CS.RUN.SEEK
bcs .9
sec
ror bSkip2
jmp .1
.7 lda hFile2
@ -221,8 +222,27 @@ CS.RUN.OPEN >PUSHWZ Aux type
>SYSCALL FOpen
rts
*--------------------------------------
CS.RUN.SEEK clc
rts
CS.RUN.SEEK >LDYA ZPPtr1
>SYSCALL atol
bcs .9
>PULLL SeekOfs
lda bSkip1
bmi .1
>PUSHBI SEEK.SET
>PUSHL SeekOfs
lda hFile1
>SYSCALL fseek
bcs .9
.1 >PUSHBI SEEK.SET
>PUSHL SeekOfs
lda hFile2
>SYSCALL fseek
.9 rts
*--------------------------------------
CS.RUN.READ1 >PUSHWI 256
>PUSHW ZPBufPtr1

View File

@ -77,7 +77,7 @@ LIST .EQ $FE5E DISASSEMBLE 20 INSTRUCTIONS
LIST2 .EQ $FE63 DISASSEMBLE •A• INSTRUCTIONS
SETINV .EQ $FE80 PRINT INVERSE TEXT TO SCREEN
SETNORM .EQ $FE84 PRINT NORMAL TEXT TO SCREEN
SETKBD .EQ $FE93 GRAB INPUT HOOKS FOR KEYBOARD
SETKBD .EQ $FE89 GRAB INPUT HOOKS FOR KEYBOARD
SETVID .EQ $FE93 GRAB OUTPUT HOOKS FOR SCREEN
XBASIC .EQ $FEB0 GO BASIC, DESTROYING OLD
BASCON .EQ $FEB3 GO BASIC, CONTINUING OLD

View File

@ -7,21 +7,21 @@ NEW
ofsC .EQ *-tclk_in offset to Cortland clock org
cclock_0
* SHORT I,M 8 bit mode.
>SHORTMX 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.
>LONGMX 16 bit mode.
lda ##$0000 zero out result space.
pha push 4 words for hex time result
pha
pha
pha
>IIGS ReadTimeHex
* SHORT M back to 8 bit to get results from stack
>SHORTM back to 8 bit to get results from stack
lda savestate restore state register
sta statereg
pla pull off seconds and ignore
@ -61,7 +61,6 @@ savestate .EQ *-ofsC
.HS 000000000000
cclk_end .EQ * end of obj cclock_0.
.HS 000000 pad to page boundary
* LONG I OFF
*--------------------------------------
MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.CCLK

View File

@ -748,7 +748,7 @@ wrefa6 .EQ *-ofsD
bcc L5881 (3-) branch if not the last.
bcs L58B1 (3) waste 3 cycles, branch always.
L58B1 bcs L58C0 (3) branch always.
L58B3 lda pch (4) absolute reference to zero page
L58B3 lda >pch (4) absolute reference to zero page
sta q6h,x (5)
lda q6l,x (4)
pha (3) waste 14 micro-seconds total

View File

@ -4,7 +4,7 @@ NEW
* global page
ofsG .EQ $2E00-MLI offset to global org
.BS $2E00-*
H2E00 jmp mlient1 $2E00-2EFF moved to $BF00
jspare .EQ *-ofsG
jmp jspare will be changed to point to dispatcher.
@ -36,13 +36,13 @@ drivertbl2 .EQ *-ofsG device driver table 2
.DA nodevice
.DA nodevice
*devnum .EQ *-ofsG most recent accessed device
.DA #0
.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
.DA #0
.AS "(C)APPLE "
mlient1 .EQ *-ofsG
@ -53,27 +53,27 @@ aftirq .EQ *-ofsG irq returns here.
sta RRAMWRAMBNK1 read/write RAM bank 1
jmp fix45 restore $45 after interrupt in LC
oldacc .EQ *-ofsG
.DA #0
.DA #0
afbank .EQ *-ofsG
.HS 00
* memory map of lower 48k. each bit represents 1 page.
* protected pages = 1, unprotected = 0
memmap .EQ *-ofsG P8 memory bitmap
memmap .EQ *-ofsG P8 memory bitmap
.HS C000000000000000
.HS 0000000000000000
.HS 0000000000000001
.HS 0000000000000001
* table of buffer addresses for currently open files.
* these can only be changed thru the mli call setbuf.
buftbl .EQ *-ofsG
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 #5
.HS 0000 file #6
.HS 0000 file #7
.HS 0000 file #8
@ -83,32 +83,32 @@ buftbl .EQ *-ofsG
* at the time of the most recent interrupt are stored here along
* with the address interrupted.
inttbl .EQ *-ofsG interrupt table
.HS 0000 int #1
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
p8areg .EQ *-ofsG A register savearea
.DA #0
p8yreg .EQ *-ofsG Y register savearea
p8xreg .EQ *-ofsG X register savearea
.DA #0
p8sreg .EQ *-ofsG S register savearea
p8yreg .EQ *-ofsG Y register savearea
.DA #0
p8preg .EQ *-ofsG P register savearea
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
intadr .EQ *-ofsG interrupt return address
.HS 0000
p8date .EQ *-ofsG bits 15-9=yr, 8-5=mo, 4-0=day
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
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
bubit .EQ *-ofsG backup bit disable, setfileinfo only
.DA #0
spare1 .EQ *-ofsG used to save acc
.DA #0
@ -116,17 +116,17 @@ newpfxptr .EQ *-ofsG appletalk alternate prefix ptr
.DA #0
*machid .EQ *-ofsG machine ID byte
.DA #0
rommap .EQ *-ofsG slot ROM bit map
rommap .EQ *-ofsG slot ROM bit map
.DA #0
preflag .EQ *-ofsG prefix active flag
.DA #0
mliact .EQ *-ofsG MLI active flag
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
mlix .EQ *-ofsG MLI X register savearea
.DA #0
mliy .EQ *-ofsG MLI Y register savearea
mliy .EQ *-ofsG MLI Y register savearea
.DA #0
* language card bank switching routines which must reside at $BFA0 because
@ -134,15 +134,15 @@ mliy .EQ *-ofsG MLI Y register savearea
HBFA0 .EQ *-ofsG
GP.HBFA0 eor $E000 test for rom enable
beq .1 taken if ram enabled
beq .1 taken if ram enabled
sta RROMBNK2 read ROM
bne .2 always
.1 lda bnkbyt2 for alternate ram
eor $D000 test
beq .2 branch if not alternate ram
bne .2 always
.1 lda bnkbyt2 for alternate ram
eor $D000 test
beq .2 branch if not alternate ram
lda RRAMWRAMBNK2 else enable alt $D000
.2 pla return code
rti re-enable interrupts and return
.2 pla return code
rti re-enable interrupts and return
mlicont .EQ *-ofsG
sec
@ -156,13 +156,13 @@ mlicont .EQ *-ofsG
jmp xdosmli
irqexit .EQ *-ofsG
lda bankid determine state of ram card (ROM/RAM)
lda bankid determine state of ram card (ROM/RAM)
irqxit0 .EQ *-ofsG
GP.irqxit0 beq .2 branch if ram card enabled.
bmi .1 branch if alternate $D000 enabled.
GP.irqxit0 beq .2 branch if ram card enabled.
bmi .1 branch if alternate $D000 enabled.
lsr determine if no ram card present.
lsr determine if no ram card present.
bcc .3 branch if rom only system.
lda RROMWRAMBNK2 enable rom
@ -185,7 +185,7 @@ bnkbyt2 .EQ *-ofsG
.DA #0
.HS 00000000 pad to before $BFFA
.DA #4 gsos compatibility byte ($BFFA)
.DA #0 pad
.DA #0 pad
.DA #0 reserved
.DA #0 version # of running interpreter
.DA #0 preserved for System Utilities

View File

@ -6,29 +6,29 @@ NEW
* address $FFCB (ROM rts opcode) for rom switching to function.
lanirq .EQ *-ofsR2
H2D9B pha $2D9B-2DFF moved to $FF9B-FFFF
.BS $2D9B-*
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
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
lda /aftirq setup return address
pha
lda #aftirq
pha
lda #$04 status reg with interrupt flag set
lda #$04 status reg with interrupt flag set
pha
H2DC2 lda /romirq setup ROM re-entry
H2DC2 lda /romirq setup ROM re-entry
pha
lda #romirq
pha
@ -64,8 +64,8 @@ stapfx .EQ *-ofsR2
* these 3 vectors hard-coded into processor
.DA nmivect nmi handler
.DA lreset reset handler
.DA nmivect nmi handler
.DA lreset reset handler
irqv .EQ *-ofsR2
.DA lanirq irq handler

View File

@ -164,7 +164,7 @@ H216E jsr reloc
sei no interrupts.
sta SETALTZP use alt zero page/stack
stx auxsp init aux sp to $FF
sta SETALTZP use main zero page/stack
sta CLRALTZP use main zero page/stack
pha restore interrupt status
plp
sta CLRC3ROM enable internal slot 3 ROM
@ -184,7 +184,7 @@ noramdsk lda RROMWRAMBNK2 read ROM/write RAM bank 2
sta auxsp
stx irqv+1 interrupt vector
sty irqv save irq vector in aux lc
sta SETALTZP use main zero page/stack
sta CLRALTZP use main zero page/stack
stx irqv+1 save irq vector in main lc
sty irqv
lda #$01

View File

@ -817,7 +817,7 @@ nxgroup dey is opcode len in lowest 2 bits of acc?
lsr (if length = 0 then error)
bne nxgroup
.LIST ON
.BS $2B89-*
H2B89 and #$03
rts if z-set then error
@ -845,7 +845,7 @@ patch101 php
sei disable interrupts
clc
xce full native mode
>LONGMX
phb save DBR
pha
pha
@ -869,9 +869,9 @@ patch101 php
>IIGS PtrToHand
plx low word of handle
plb set DBR to handle's bank
lda 1,x get upper 16 bits of 24 bit address
lda >1,x get upper 16 bits of 24 bit address
tay save in y
lda 0,x get low 8 bits of address
lda >0,x get low 8 bits of address
and ##$00FF clear high byte
xba put address in high byte
ora ##$005C include JML opcode
@ -903,7 +903,8 @@ L2C4D lda 1,s
sec
rtl
.BS $2C80-*
.BS $2C80-*
MAN
SAVE USR/SRC/PRODOS.203/PRODOS.S.LDR.B
LOAD USR/SRC/PRODOS.203/PRODOS.S

View File

@ -9,7 +9,7 @@ RAM_1 .BS $2C80-*
H2C80 ldy #$99 move $9A bytesfrom lcsrc to lcdest.
.1 lda lcsrc,y transfer main bank portion of driver
.1 lda lcsrc,y transfer main bank portion of driver
sta lcdest,y
dey
cpy #$FF
@ -19,7 +19,7 @@ H2C80 ldy #$99 move $9A bytesfrom lcsrc to lcdest.
stx A1L
dex
stx A2L
ldx ramsrc
ldx /ramsrc
stx A1L+1
inx
stx A2L+1

View File

@ -99,7 +99,7 @@ L5194 lda (A1L),y move A1,A2 to A4,A3
sta (A3L),y
dey
bne L5194
sta SETALTZP use main zero page/stack
sta CLRALTZP use main zero page/stack
L51A2 stx R2L
pla restore R2
sta R2H

View File

@ -260,22 +260,22 @@ L5C0B jsr prntmsg
dsp1msgs .EQ *-ofsS
dsp1msg0 .EQ *-ofsS
.AS "ENTER PREFIX (PRESS "RETURN" TO ACCEPT)"
.AS -"ENTER PREFIX (PRESS "RETURN" TO ACCEPT)"
.HS 00
disp1msg .EQ *-ofsS
.AS "ENTER PATHNAME OF NEXT APPLICATION"
.AS -"ENTER PATHNAME OF NEXT APPLICATION"
.HS 00
dsp1err1 .EQ *-ofsS
.DA #$87
.AS "NOT A TYPE "SYS" FILE"
.AS -'NOT A TYPE "SYS" FILE'
.HS 00
dsp1err2 .EQ *-ofsS
.DA #$87
.AS "I/O ERROR "
.AS -"I/O ERROR "
.HS 00
dsp1err3 .EQ *-ofsS
.DA #$87
.AS "FILE/PATH NOT FOUND "
.AS -"FILE/PATH NOT FOUND "
.HS 00
dsp1info .EQ *-ofsS get file info parms
.DA #$0A 10 parameters

View File

@ -381,13 +381,13 @@ doread .EQ *-ofsB
* data area
dsp2msg .EQ *-ofsB
.AS "RETURN: Select | TAB: Chg Vol | "
.AS "ESC: Back"
.AS -"RETURN: Select | TAB: Chg Vol | "
.AS -"ESC: Back"
.DA #$00
fldrmsg .EQ *-ofsB
.DA #$0F inverse control code
.HS 1B enable mousetext
.AS "XY" folder characters
.AS -"XY" folder characters
.HS 18 disable mousetext
.HS 0E normal control code
.HS 00

View File

@ -19,7 +19,7 @@ GQdisp lda RRAMWRAMBNK1 read/write LC bank 1
clc
xce 16 bit native mode.
jmp P8QUIT go to GQuit.
.DA #0000000000 offset to paragraph boundary.
.HS 0000000000 offset to paragraph boundary.
.AS "GQ" id bytes so GQuit can identify this
* load application
@ -39,10 +39,10 @@ GQdisp lda RRAMWRAMBNK1 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
* LONG I ON
>SHORTM 8 bit accumulator
pha save the switch status.
ldx #inbuf point to passed prefix.
ldx ##inbuf point to passed prefix.
jsr copyvol copy the name into the buffer.
pla retrieve the switch status
@ -66,11 +66,11 @@ L6020 jsr MLI set prefix
* load application at $2000
L602D xce native mode (carry clear)
* LONG I 16 bit regs, 8 bit acc.
>LONGX 16 bit regs, 8 bit acc.
lda pbuf+1 is the application name
cmp #$2F a complete pathname ?
bne L603D no, use prefix as volume name
ldx #pbuf else use the application name.
ldx ##pbuf else use the application name.
jsr copyvol copy the volume name to buffer.
L603D sec back to emulation mode.
xce
@ -124,7 +124,7 @@ L6099 lda RROMBNK2 enable ROM
gqerror .EQ *-ofsQ
clc
xce 16 bit native mode
* LONG I,M
>LONGMX
jsr mountvol mount volume.
bcs L60AB if error.
sec back to emulation mode.
@ -136,8 +136,8 @@ gqerror .EQ *-ofsQ
L60AB clc native mode
xce
* LONG I,M
and #$00FF mask off high byte of error code.
>LONGMX
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.
@ -167,16 +167,16 @@ L60AB clc native mode
* 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.
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 ?
and ##$00FF mask just in case.
cmp ##$0045 volume not found ?
beq L6101 yes
cmp #$002F no disk in drive ?
cmp ##$002F no disk in drive ?
beq L6101 yes
sec indicate error not handled.
rts return with error code still in acc.
@ -210,7 +210,7 @@ L6101 pha save error code in case esc pressed.
pld restore D reg.
plx pull volume name pointer off stack
plx
cmp #$0001 which button was pressed ?
cmp ##$0001 which button was pressed ?
bne L613C if Escape pressed.
clc indicate Return was pressed.
pla pull original error code off stack.
@ -225,21 +225,20 @@ L613C sec indicate Escape was pressed.
* output: volume name is stored in volbuf.
copyvol .EQ *-ofsQ
lda 1,x get the first slash
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.
ldy ##$0002 initialize the length count.
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
bra L6148
L6156 dey fix character count.
tya length.
sta volbuf store the resultant string length.
tya length.
sta volbuf store the resultant string length.
rts
* translate a filename message from the message center to the currently
@ -263,7 +262,7 @@ L6170 lda #$FF put flag conditioning value on
pha the stack (assume error).
clc native 16-bit mode.
xce
* LONG I,M
>LONGMX
pha make room on stack for user id.
>IIGS MMStartUp start up the memory manager.
pla get the user id and
@ -288,70 +287,70 @@ L6170 lda #$FF put flag conditioning value on
pha (still in acc and x regs)
>IIGS 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 point to new direct page space.
tcd make a new direct page.
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 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.
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.
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)
>SHORTM 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.
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.
>LONGM 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 garbage handle (not used).
pha
>IIGS MessageCenter go delete the message.
L6203 >IIGS DisposeHandle throw away message (handle is on stack)
L620A >IIGS 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.
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.
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.
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
lda #$00 set z-flag
L6231 rts and go launch the app.
* check for disk volume
@ -363,23 +362,23 @@ L6231 rts and go launch the app.
ckfordrv .EQ *-ofsQ
SEL2.ckfordrv clc native mode
xce
* LONG I 16-bit regs, 8-bit acc.
ldx #sysentry+6 point to pathname buffer.
>LONGX 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.
.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)
bcc .2 branch if volume found,
clc (native mode)
xce
* LONG I,M
>LONGMX
jsr mountvol else ask user to mount the volume.
bcc .1 if <return> pressed, then try again.
sec emulation mode.
sec emulation mode.
xce
sec disk not found.
sec disk not found.
.2 rts
* Prodos 8 parameter lists
@ -435,12 +434,12 @@ gfiparms .EQ *-ofsQ get file info parms.
quitstr1 .EQ *-ofsQ
.DA #$1B
.AS 'Can't run next application.'
.AS "Can't run next application."
quitstr2 .EQ *-ofsQ
.DA #$14
.AS "ProDOS Error = $"
errval .EQ *-ofsQ hex error code gets stored here
.AS ' '
.AS " "
quitbtn2 .EQ *-ofsQ null string (no 2nd button)
.HS 00

View File

@ -92,13 +92,13 @@ tdays .EQ *-ofsT
* the days of the week.
yradj .EQ *-ofsT
.DA #$60 Monday
.DA #$5F Sunday
.DA #$5E Saturday
.DA #$5D Friday
.DA #$62 Thursday
.DA #$61 Wednesday
.DA #$60 Tuesday
.DA #$07 Monday
.DA #$0C Sunday
.DA #$0B Saturday
.DA #$0A Friday
.DA #$09 Thursday
.DA #$08 Wednesday
.DA #$08 Tuesday
tclk_end .EQ * end of obj tclock_0.
.HS 000000 pad
*--------------------------------------

View File

@ -4,8 +4,8 @@ NEW
* xdos mli system call processor
ofsX .EQ *-xdosorg offset to xdos org
xdosmli .EQ *-ofsX xdos MLI in aux ram
xdosobj cld no decimal.
pla get processor status
sta spare1 save it temporarily
@ -109,7 +109,7 @@ devmgr .EQ *-ofsX
php do not allow interrupts.
sei the call spec for devices must
H30B9 lda (A3L),y be passed to drivers in page zero:
sta (A4L),y sta $0042,y
sta >$0042,y
dey
bne H30B9
ldx buf+1 buffer page

View File

@ -32,7 +32,7 @@ L4DED dex test for conflicts.
inx
inx
inx
L4DFE dex set proper bits to 1
L4DFE dex set proper bits to 1
jsr cmembit
ora memmap,y to mark it's allocation.
sta memmap,y
@ -47,7 +47,7 @@ L4DFE dex set proper bits to 1
sta buftbl-1,x validated as good. store hi addr
clc (entnums start at 1, not 0)
rts
L4E1E lda #$56 buffer is in use or not legal
L4E1E lda #$56 buffer is in use or not legal
sec
rts
getbufadr .EQ *-ofsX
@ -69,21 +69,21 @@ freebuf .EQ *-ofsX
inx
inx
inx
L4E43 dex drop to next lower page.
L4E43 dex drop to next lower page.
jsr cmembit get bit and position to memtable of
eor #$FF this page. invert mask.
and memmap,y mark address as free space.
sta memmap,y
cpx bufaddrh all pages freed ?
bne L4E43 no.
L4E54 clc no error.
L4E54 clc no error.
rts
* calculate memory allocation bit position.
* on entry: x = high address of buffer, low address assumed zero.
* on exit: acc = allocation bit mask, x = unchanged, y = pointer to memtabl byte
cmembit .EQ *-ofsX
cmembit .EQ *-ofsX
txa page address
and #$07 which page in any 2k set ?
tay use as index to determine
@ -105,7 +105,7 @@ valdbuf .EQ *-ofsX
sbc #$01 (carry is set)
bcs L4E76
dex
L4E76 clc
L4E76 clc
adc usrbuf calculate end of request address.
txa do high address.
adc usrbuf+1 the final address
@ -113,8 +113,8 @@ L4E76 clc
cpx #$BF
bcs L4E1E report bad buffer.
inx loop thru all affected pages.
vldbuf1 .EQ *-ofsX
L4E82 dex check next lower page.
vldbuf1 .EQ *-ofsX
L4E82 dex check next lower page.
jsr cmembit
and memmap,y if 0 then no conflict.
bne L4E1E branch if conflict.
@ -123,7 +123,7 @@ L4E82 dex check next lower page.
clc all pages ok.
rts
getbuf .EQ *-ofsX give user address of file buffer
getbuf .EQ *-ofsX give user address of file buffer
ldy #$02 referenced by refnum.
lda bufaddrl
sta (A3L),y
@ -133,7 +133,7 @@ getbuf .EQ *-ofsX give user address of file buffer
clc no errors possible
rts
setbuf .EQ *-ofsX
setbuf .EQ *-ofsX
ldy #$03
jsr alcbufr1 allocate new buffer address over old one
bcs L4EC7 report any errors immediately
@ -144,7 +144,7 @@ setbuf .EQ *-ofsX
jsr freebuf free address space of old buffer
ldy #$00
ldx #$03
L4EB8 lda (usrbuf),y move all 4 pages of the buffer to
L4EB8 lda (usrbuf),y move all 4 pages of the buffer to
sta (datptr),y new location.
iny
bne L4EB8
@ -153,7 +153,7 @@ L4EB8 lda (usrbuf),y move all 4 pages of the buffer to
dex
bpl L4EB8
clc no errors
L4EC7 rts
L4EC7 rts
* move 3 pages of dispatcher from 'displc2' to 'dispadr'
@ -171,7 +171,7 @@ calldisp .EQ *-ofsX
stz A1L
ldy #$00
ldx #$03 3 pages to move.
L4EE0 dey move a page of code.
L4EE0 dey move a page of code.
lda (A1L),y
sta (A2L),y
tya
@ -193,7 +193,7 @@ L4EE0 dey move a page of code.
* translate a prodos call into a smartport call
* to access unseen smartport devices
remap_sp .EQ *-ofsX
remap_sp .EQ *-ofsX
ldx #$03 assume 3 parameters.
lda A4L command number
sta cmdnum
@ -203,10 +203,10 @@ remap_sp .EQ *-ofsX
ldy /spstatlist
sty buf+1
stz bloknml set statcode = 0 for simple status call
L4F1B cmp #$03 format command ?
L4F1B cmp #$03 format command ?
bne L4F21 no.
ldx #$01 format has only 1 parameter.
L4F21 stx statparms set # of parms.
L4F21 stx statparms set # of parms.
lda unitnum
lsr turn unit number into an index
lsr
@ -220,13 +220,13 @@ L4F21 stx statparms set # of parms.
lda spvecthi-1,x
sta sp_vector+2
ldx #$04 copy buffer pointer and block #
L4F3F lda buf-1,x from prodos parameters
L4F3F lda buf-1,x from prodos parameters
sta sp_bufptr-1,x to smartport parameter block
dex
bne L4F3F
sp_vector .EQ *-ofsX smartport call
sp_vector .EQ *-ofsX smartport call
jsr $0000 (entry address gets modified)
cmdnum .EQ *-ofsX
cmdnum .EQ *-ofsX
.HS 00 command #
.DA statparms
bcs L4F6E
@ -239,294 +239,293 @@ cmdnum .EQ *-ofsX
bne L4F65 yes, check for write protected.
lda #$2F return offline error.
bra L4F6D
L4F65 and #$44 mask all but write allowed and write
L4F65 and #$44 mask all but write allowed and write
eor #$40 protected bits. if allowed and not
beq L4F6E protected, exit with carry clear
lda #$2B else return write protected error.
L4F6D sec
L4F6E rts
spvectlo .EQ *-ofsX storage for low byte of smartport
.HS 0000000000000000 entry.
.HS 00000000000000
spvecthi .EQ *-ofsX storage for high byte of smartport
.HS 0000000000000000 entry.
.HS 00000000000000
statparms .EQ *-ofsX # of parms (always 3 except format)
.HS 03
sp_unitnum .EQ *-ofsX
.HS 00 unit number
sp_bufptr .EQ *-ofsX
.HS 0000 data buffer
L4F6D sec
L4F6E rts
spvectlo .EQ *-ofsX storage for low byte of smartport
.HS 0000000000000000 entry.
.HS 00000000000000
spvecthi .EQ *-ofsX storage for high byte of smartport
.HS 0000000000000000 entry.
.HS 00000000000000
statparms .EQ *-ofsX # of parms (always 3 except format)
.HS 03
sp_unitnum .EQ *-ofsX
.HS 00 unit number
sp_bufptr .EQ *-ofsX
.HS 0000 data buffer
.HS 000000 block number (3 bytes)
* data tables
scnums .EQ *-ofsX table of valid mli command numbers.
.HS D3000000
.HS 40410000808182
.HS 65C0C1C2C3C4C5C6
.HS C7C8C9CACBCCCDCE
.HS CF00D0D1D2
pcntbl .EQ *-ofsX parameter counts for the calls
.HS 02FFFF
.HS FF0201FFFF030300
.HS 04070102070A0201
.HS 0103030404010102
.HS 02FF020202
scnums .EQ *-ofsX table of valid mli command numbers.
.HS D3000000
.HS 40410000808182
.HS 65C0C1C2C3C4C5C6
.HS C7C8C9CACBCCCDCE
.HS CF00D0D1D2
pcntbl .EQ *-ofsX parameter counts for the calls
.HS 02FFFF
.HS FF0201FFFF030300
.HS 04070102070A0201
.HS 0103030404010102
.HS 02FF020202
* command table
cmdtable .EQ *-ofsX
.DA create create
.DA destroy destroy
.DA rename rename
.DA setinfo setinfo
.DA getinfo getinfo
.DA online online
.DA setprefx set prefix
.DA getprefx get prefix
.DA openf open
.DA newline newline
.DA readf read
.DA writef write
.DA closef close
.DA flushf flush
.DA setmark set mark
.DA getmark get mark
.DA seteof seteof
.DA geteof geteof
.DA setbuf setbuf
.DA getbuf getbuf
cmdtable .EQ *-ofsX
.DA create create
.DA destroy destroy
.DA rename rename
.DA setinfo setinfo
.DA getinfo getinfo
.DA online online
.DA setprefx set prefix
.DA getprefx get prefix
.DA openf open
.DA newline newline
.DA readf read
.DA writef write
.DA closef close
.DA flushf flush
.DA setmark set mark
.DA getmark get mark
.DA seteof seteof
.DA geteof geteof
.DA setbuf setbuf
.DA getbuf getbuf
* corresponding command function bytes
disptch .EQ *-ofsX
.HS A0A1A2A3
.HS 84050607
disptch .EQ *-ofsX
.HS A0A1A2A3
.HS 84050607
.HS 88494A4B
.HS 2C2D4E4F
.HS 50515253
.HS 2C2D4E4F
.HS 50515253
dinctbl .EQ *-ofsX table to increment
.HS 0100000200 directory usage/eof counts
pass .EQ *-ofsX
.HS 75
xdosver .EQ *-ofsX
.HS 00
compat .EQ *-ofsX
dinctbl .EQ *-ofsX table to increment
.HS 0100000200 directory usage/eof counts
pass .EQ *-ofsX
.HS 75
xdosver .EQ *-ofsX
.HS 00
compat .EQ *-ofsX
.HS 00
.HS C3270D000000
rootstuf .EQ *-ofsX
.HS 0F02000400000800
whichbit .EQ *-ofsX
.HS 8040201008040201
ofcbtbl .EQ *-ofsX
.HS 0C0D1819151617
inftabl .EQ *-ofsX
.HS 1E101F2080939421
.HS 22232418191A1B
deathmsg .EQ *-ofsX
.HS 20
.AS 'RESTART SYSTEM-$01'
.HS 20
rootstuf .EQ *-ofsX
.HS 0F02000400000800
whichbit .EQ *-ofsX
.HS 8040201008040201
ofcbtbl .EQ *-ofsX
.HS 0C0D1819151617
inftabl .EQ *-ofsX
.HS 1E101F2080939421
.HS 22232418191A1B
deathmsg .EQ *-ofsX
.HS 20
.AS -"RESTART SYSTEM-$01"
.HS 20
*** work space ***
* note: this area is accessed by code that depends on the order of these
* variables in the file control block and temporary directory.
own_blk .EQ *-ofsX
.HS 0000
own_ent .EQ *-ofsX
.HS 00
own_len .EQ *-ofsX
.HS 00
h_credt .EQ *-ofsX
.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.)
.HS 00
h_entln .EQ *-ofsX length of each entry in this directory
.HS 00
h_maxent .EQ *-ofsX maximum number of entries per block
.HS 00
h_fcnt .EQ *-ofsX current # of files in this directory
.HS 0000
h_bmap .EQ *-ofsX address of first allocation bitmap
.HS 0000
h_tblk .EQ *-ofsX total number of blocks on this unit
.HS 0000
d_dev .EQ *-ofsX device number of this directory entry
.HS 00
d_head .EQ *-ofsX address of <sub> directory header
.HS 0000
d_entblk .EQ *-ofsX address of block which contains entry
.HS 0000
d_entnum .EQ *-ofsX entry number within block
.HS 00
d_stor .EQ *-ofsX
.HS 0000000000000000 file name
.HS 0000000000000000
d_filid .EQ *-ofsX user's identification byte
.HS 00
d_frst .EQ *-ofsX first block of file
.HS 0000
d_usage .EQ *-ofsX # of blocks allocated to this file
.HS 0000
d_eof .EQ *-ofsX current end of file marker
.HS 000000
d_credt .EQ *-ofsX
.HS 0000 file creation date
.HS 0000 file creation time
d_sosver .EQ *-ofsX sos version that created this file
.HS 00
d_comp .EQ *-ofsX backward version compatibility
.HS 00
d_attr .EQ *-ofsX attributes (protect, r/w, enable, etc.)
.HS 00
d_auxid .EQ *-ofsX user auxilliary identification
.HS 0000
d_moddt .EQ *-ofsX
.HS 0000 file's last modification date
.HS 0000 file's last modification time
d_dhdr .EQ *-ofsX file directory header block address
.HS 0000
scrtch .EQ *-ofsX scratch area for
.DA #00000000 allocation address conversion.
oldeof .EQ *-ofsX temp used in r/w
.HS 000000
oldmark .EQ *-ofsX
.DA #000000
xvcbptr .EQ *-ofsX used in 'cmpvcb' as a temp
.HS 00
vcbptr .EQ *-ofsX
.HS 00
fcbptr .EQ *-ofsX
.HS 00
fcbflg .EQ *-ofsX
.HS 00
reql .EQ *-ofsX
.HS 00
reqh .EQ *-ofsX
.HS 00
levels .EQ *-ofsX
.HS 00
totent .EQ *-ofsX
.HS 00
entcntl .EQ *-ofsX
.HS 00
entcnth .EQ *-ofsX
.HS 00
cntent .EQ *-ofsX
.HS 00
nofree .EQ *-ofsX
.HS 00
bmcnt .EQ *-ofsX
.HS 00
saptr .EQ *-ofsX
.HS 00
pathcnt .EQ *-ofsX
.HS 00
p_dev .EQ *-ofsX
.HS 00
p_blok .EQ *-ofsX
.HS 0000
bmptr .EQ *-ofsX
.HS 00
basval .EQ *-ofsX
.HS 00
half .EQ *-ofsX
.HS 00
own_blk .EQ *-ofsX
.HS 0000
own_ent .EQ *-ofsX
.HS 00
own_len .EQ *-ofsX
.HS 00
h_credt .EQ *-ofsX
.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.)
.HS 00
h_entln .EQ *-ofsX length of each entry in this directory
.HS 00
h_maxent .EQ *-ofsX maximum number of entries per block
.HS 00
h_fcnt .EQ *-ofsX current # of files in this directory
.HS 0000
h_bmap .EQ *-ofsX address of first allocation bitmap
.HS 0000
h_tblk .EQ *-ofsX total number of blocks on this unit
.HS 0000
d_dev .EQ *-ofsX device number of this directory entry
.HS 00
d_head .EQ *-ofsX address of <sub> directory header
.HS 0000
d_entblk .EQ *-ofsX address of block which contains entry
.HS 0000
d_entnum .EQ *-ofsX entry number within block
.HS 00
d_stor .EQ *-ofsX
.HS 0000000000000000 file name
.HS 0000000000000000
d_filid .EQ *-ofsX user's identification byte
.HS 00
d_frst .EQ *-ofsX first block of file
.HS 0000
d_usage .EQ *-ofsX # of blocks allocated to this file
.HS 0000
d_eof .EQ *-ofsX current end of file marker
.HS 000000
d_credt .EQ *-ofsX
.HS 0000 file creation date
.HS 0000 file creation time
d_sosver .EQ *-ofsX sos version that created this file
.HS 00
d_comp .EQ *-ofsX backward version compatibility
.HS 00
d_attr .EQ *-ofsX attributes (protect, r/w, enable, etc.)
.HS 00
d_auxid .EQ *-ofsX user auxilliary identification
.HS 0000
d_moddt .EQ *-ofsX
.HS 0000 file's last modification date
.HS 0000 file's last modification time
d_dhdr .EQ *-ofsX file directory header block address
.HS 0000
scrtch .EQ *-ofsX scratch area for
.HS 00000000 allocation address conversion.
oldeof .EQ *-ofsX temp used in r/w
.HS 000000
oldmark .EQ *-ofsX
.HS 000000
xvcbptr .EQ *-ofsX used in 'cmpvcb' as a temp
.HS 00
vcbptr .EQ *-ofsX
.HS 00
fcbptr .EQ *-ofsX
.HS 00
fcbflg .EQ *-ofsX
.HS 00
reql .EQ *-ofsX
.HS 00
reqh .EQ *-ofsX
.HS 00
levels .EQ *-ofsX
.HS 00
totent .EQ *-ofsX
.HS 00
entcntl .EQ *-ofsX
.HS 00
entcnth .EQ *-ofsX
.HS 00
cntent .EQ *-ofsX
.HS 00
nofree .EQ *-ofsX
.HS 00
bmcnt .EQ *-ofsX
.HS 00
saptr .EQ *-ofsX
.HS 00
pathcnt .EQ *-ofsX
.HS 00
p_dev .EQ *-ofsX
.HS 00
p_blok .EQ *-ofsX
.HS 0000
bmptr .EQ *-ofsX
.HS 00
basval .EQ *-ofsX
.HS 00
half .EQ *-ofsX
.HS 00
* bitmap info tables
bmastat .EQ *-ofsX
.HS 00
bmadev .EQ *-ofsX
.HS 00
bmadadr .EQ *-ofsX
.HS 0000
bmacmap .EQ *-ofsX
.HS 00
tposll .EQ *-ofsX
.HS 00
tposlh .EQ *-ofsX
.HS 00
tposhi .EQ *-ofsX
.HS 00
rwreql .EQ *-ofsX
.HS 00
rwreqh .EQ *-ofsX
.HS 00
nlchar .EQ *-ofsX
.HS 00
nlmask .EQ *-ofsX
.HS 00
ioaccess .EQ *-ofsX has a call been made to
.HS 00 disk device handler ?
cmdtemp .EQ *-ofsX
.HS 00
bkbitflg .EQ *-ofsX used to set or clear backup bit
.HS 00
duplflag .EQ *-ofsX
.HS 00
vcbentry .EQ *-ofsX
.HS 00
bmastat .EQ *-ofsX
.HS 00
bmadev .EQ *-ofsX
.HS 00
bmadadr .EQ *-ofsX
.HS 0000
bmacmap .EQ *-ofsX
.HS 00
tposll .EQ *-ofsX
.HS 00
tposlh .EQ *-ofsX
.HS 00
tposhi .EQ *-ofsX
.HS 00
rwreql .EQ *-ofsX
.HS 00
rwreqh .EQ *-ofsX
.HS 00
nlchar .EQ *-ofsX
.HS 00
nlmask .EQ *-ofsX
.HS 00
ioaccess .EQ *-ofsX has a call been made to
.HS 00 disk device handler ?
cmdtemp .EQ *-ofsX
.HS 00
bkbitflg .EQ *-ofsX used to set or clear backup bit
.HS 00
duplflag .EQ *-ofsX
.HS 00
vcbentry .EQ *-ofsX
.HS 00
* xdos temporary variables
namcnt .EQ *-ofsX
.HS 00
rnptr .EQ *-ofsX
.HS 00
namptr .EQ *-ofsX
.HS 00
vnptr .EQ *-ofsX
.HS 00
prfxflg .EQ *-ofsX
.HS 00
cferr .EQ *-ofsX
.HS 00
namcnt .EQ *-ofsX
.HS 00
rnptr .EQ *-ofsX
.HS 00
namptr .EQ *-ofsX
.HS 00
vnptr .EQ *-ofsX
.HS 00
prfxflg .EQ *-ofsX
.HS 00
cferr .EQ *-ofsX
.HS 00
* deallocation temporary variables
firstbl .EQ *-ofsX
.HS 00
firstbh .EQ *-ofsX
.HS 00
stortyp .EQ *-ofsX
.HS 00
deblock .EQ *-ofsX
.HS 0000
dtree .EQ *-ofsX
.HS 00
dsap .EQ *-ofsX
.HS 00
dseed .EQ *-ofsX
.HS 0000
topdest .EQ *-ofsX
.HS 00
dtmpx .EQ *-ofsX
.HS 00
loklst .EQ *-ofsX look list of recognized device numbers
dealbufl .EQ *-ofsX
firstbl .EQ *-ofsX
.HS 00
firstbh .EQ *-ofsX
.HS 00
stortyp .EQ *-ofsX
.HS 00
deblock .EQ *-ofsX
.HS 0000
dtree .EQ *-ofsX
.HS 00
dsap .EQ *-ofsX
.HS 00
dseed .EQ *-ofsX
.HS 0000
topdest .EQ *-ofsX
.HS 00
dtmpx .EQ *-ofsX
.HS 00
loklst .EQ *-ofsX look list of recognized device numbers
dealbufl .EQ *-ofsX
.HS 0000000000000000
dealbufh .EQ *-ofsX
.HS 0000000000000000
cbytes .EQ *-ofsX
.HS 0000
.HS 00 cbytes+2 must = 0
bufaddrl .EQ *-ofsX
.HS 00
bufaddrh .EQ *-ofsX
.HS 00
goadr .EQ *-ofsX
.HS 0000
delflag .EQ *-ofsX used by 'detree' to know if called
.HS 00 from delete (destroy).
dealbufh .EQ *-ofsX
.HS 0000000000000000
cbytes .EQ *-ofsX
.HS 0000
.HS 00 cbytes+2 must = 0
bufaddrl .EQ *-ofsX
.HS 00
bufaddrh .EQ *-ofsX
.HS 00
goadr .EQ *-ofsX
.HS 0000
delflag .EQ *-ofsX used by 'detree' to know if called
.HS 00 from delete (destroy).
* zero fill to page boundary - 3 ($FEFD). so that cortland flag stays
* within page boundary.
@ -535,8 +534,8 @@ delflag .EQ *-ofsX used by 'detree' to know if called
.HS 0000000000
.DA calldisp
cortflag .EQ *-ofsX cortland flag. 1 = Cortland system
.HS 00 (must stay within page boundary)
cortflag .EQ *-ofsX cortland flag. 1 = Cortland system
.HS 00 (must stay within page boundary)
* end of obj mli_2
*--------------------------------------

View File

@ -20,6 +20,25 @@ MMShutDown .EQ $0303
ReadTimeHex .EQ $0D03
Int2Hex .EQ $220B
TLTextMountVolume .EQ $1201
*--------------------------------------
.MA SHORTMX
sep #$30
.EM
.MA SHORTM
sep #$20
.EM
.MA SHORTX
sep #$10
.EM
.MA LONGMX
rep #$30
.EM
.MA LONGM
rep #$20
.EM
.MA LONGX
rep #$10
.EM
*--------------------------------------
.MA IIGS
ldx ##]1