home *** CD-ROM | disk | FTP | other *** search
Text File | 2019-04-13 | 21.7 KB | 1,557 lines |
- ;┴├┼-128/64 KERNEL BY ├RAIG ┬RUCE, STARTED 04-═AR-1992.
-
- ;* SYSTEM ZERO-PAGE MEMORY USAGE:
- ;* $02-$7F = APPLICATION WORK AREA
- ;* $80-$8F = SYSTEM WORK AREA
- ;* $F8-$FF = SYSTEM PARAMETER AREA
-
- ;* INITIAL ┴├┼ ╥┴═0 ORGANIZATION
- ;* $0000-$0EFF = SYSTEM STORAGE
- ;* $0F00-$0FFF = KERNEL INTERFACE VARIABLES
- ;* $1000-$12FF = SYSTEM STORAGE
- ;* $1300-$1FFF = ╙HELL PROGRAM (3.25╦)
- ;* $2000-$27FF = CHARACTER SET (2╦)
- ;* $2800-$6FFF = ┴├┼ KERNEL AND DEVICE DRIVERS (18╦)
- ;* $7000-$BFFF = APPLICATION AREA & STACK (20╦)
- ;* $C000-$FFFF = ╥╧═ AND ╔/╧, ╥┴═ (16╦) [├128,├64]
- ;* $D800-$DBFF = ╥┴═: SOFT-80 CHARSET [├64,BITMAP]
- ;* $DC00-$DFFF = ╥┴═: COLOR SCREEN [├64,BITMAP]
- ;* $E000-$FFFF = ╥┴═: BITMAPPED SCREEN [├64,BITMAP]
-
- ;* FAR MEMORY TYPES
- ;* $00=NULL, $01=REU, $02=INTERNAL-512╦, $06=RL-REU, $07=RL-RAM
-
- COMPUTER = 128
-
- .SEQ ACEHEAD.S
- .SEQ KERNHEAD.S
- .ORG $2800
-
- .IF COMPUTER-64
- .OBJ "@0:ACE128"
- .ELSE
- .OBJ "@0:ACE64"
- .IFE
-
- JMP ENTRY╨OINT
-
- ;***JUMP TABLE
-
- JMP ACE╧PEN
- JMP ACE├LOSE
- JMP ACE╥EAD
- JMP ACE╫RITE
- JMP ACE╧PEN ;FASTOPEN
- JMP ACE├LOSE ;FASTCLOSE
- JMP ACE╥EAD ;FASTREAD
- JMP ACE┬LOAD
- JMP ACE╥EMOVE
- JMP ACE╥ENAME
- JMP ACE─EV╔NFO
- JMP ACE╞CB╙WAP
-
- JMP ACE─IR╧PEN
- JMP ACE─IR├LOSE
- JMP ACE─IR╥EAD
- JMP ACE╔SDIR
- JMP ACE├H─IR
- JMP ACE├D╚OME
- JMP ACE═KDIR
- JMP ACE╥MDIR
-
- JMP ACE┌P╠OAD
- JMP ACE┌P╙TORE
- JMP ACE╞ETCH
- JMP ACE╙TASH
- JMP ACE╨AGE┴LLOC
- JMP ACE╨AGE╞REE
-
- JMP ACE╫INMAX
- JMP ACE╫INCLS
- JMP ACE╫INSET
- JMP ACE╫INSIZE
- JMP ACE╫INPUT
- JMP ACE╫INCOLOR
- JMP ACE╫INPOS
- JMP ACE╫INCURSOR
- JMP ACE╫INSCROLL
-
- JMP CON╥EAD
- JMP CON╫RITE
- JMP CON╨UTCHAR
- JMP CON╨UTCHAR╠IT
- JMP ACE╙TOP╦EY
- JMP CON╟ETKEY
- JMP CON├OLOR
- JMP CON╨ALETTE
- JMP CON╙CREEN
- JMP CON╨OS
-
- JMP ACE┼XEC
- JMP ACE┼XEC╙UB
- JMP ACE┼XIT
- JMP ACE═EM╙TAT
-
- JMP ACE╒TOA
- JMP ACE╟ET─ATE
- JMP ACE╙ET─ATE
- JMP ACE├MD╧PEN
- JMP ACE├MD├LOSE
- JMP ACE├MD╙END
- JMP ACE├MD╙TATUS
-
- .BYTE $FF,$FE,$3C,$E2,$FC
-
- ;***GLOBAL DECLARATIONS
-
- MAX┌P╒SE = $90
- CONFIG┬UF = $800
- KEYLINE┬UF = $900
- FCB╘ABLE1 = $B00
-
- .IF COMPUTER-64
- MAX╨AGE = $C0
- BK┴├┼ = $0E
- BK╥AM0 = $3F
- BK╦ERNEL = $00
- BK├HARSET = $0F
- BK╙ELECT = $FF00
- KERNEL╔RQ╚ANDLER = $FA65
- KERNEL┬RK╚ANDLER = $B003
- KERNEL╬MI╚ANDLER = $FA40
- .ELSE
- STRING┬UFFER = $A00
- RAM0╞REE═AP = $1000
- FREEMAP = $1100
- WORKBUF = $1200
- MAX╨AGE = $D0
- BK╙ELECT = $01
- BK┴├┼ = $36
- BK╥AM0 = $30
- BK╦ERNEL = $37
- KERNEL╔RQ╚ANDLER = $EA31
- KERNEL┬RK╚ANDLER = $FE66
- KERNEL╬MI╚ANDLER = $FE47
- .IFE
-
- CIA1 = $DC00
- ST = $90
- TRUE = $FF
- FALSE = $00
- CHR┬┼╠ = $07
- CHR╘┴┬ = $09
- CHR╠╞ = $0A
- CHR├╥ = $0D
- CHR┬╙ = $14
- CHR├╠╥ = $93
- CHR╤╒╧╘┼ = $22
-
- FCB├OUNT = 16
- LFTABLE .BUF FCB├OUNT
- DEVTABLE .BUF FCB├OUNT
- SATABLE .BUF FCB├OUNT
- EOFTABLE .BUF FCB├OUNT
- PIDTABLE .BUF FCB├OUNT
- LFNULL = $FF
- FCB╬ULL = $FF
- MIN─ISK = 8
- REGSAVE .BUF 3
-
- NEWLF .BUF 1
-
- KERNEL├LALL = $FFE7
- KERNEL╙ETBNK = $FF68
- KERNEL╙ETMSG = $FF90
- KERNEL╥EADST = $FFB7
- KERNEL╙ETLFS = $FFBA
- KERNEL╙ETNAM = $FFBD
- KERNEL╧PEN = $FFC0
- .IF COMPUTER-64
- KERNEL├LOSE = $FFC3
- .IFE
- KERNEL├HKIN = $FFC6
- KERNEL├HKOUT = $FFC9
- KERNEL├LRCHN = $FFCC
- KERNEL├HRIN = $FFCF
- KERNEL├HROUT = $FFD2
- KERNEL╠OAD = $FFD5
- KERNEL╙TOP = $FFE1
- KERNEL╟ETIN = $FFE4
- KERNEL╙CRORG = $FFED
- KERNEL╙WAPPER = $FF5F
-
- .IF COMPUTER-64
- ;128 NOTHING HERE
- .ELSE
- ;*** KERNEL CLOSE WITH PSEUDO-CLOSE FOR DISK COMMAND CHANNEL FOR THE 64
- KERNEL├LOSE = *
- BCS +
- JMP $FFC3
- + LDX $98
- - DEX
- BMI KERNEL├LOSE┼XIT
- CMP $259,X
- BNE -
- BEQ +
- BRK
- ;** FOUND ENTRY; COPY LAST ENTRY ON TOP IF IT
- + LDY $98
- DEY
- LDA $259,Y ;MOVE LFN
- STA $259,X
- LDA $263,Y ;MOVE DEV NUM
- STA $263,X
- LDA $26D,Y ;MOVE SEC ADDR
- STA $26D,X
- DEC $98
- KERNEL├LOSE┼XIT = *
- CLC
- RTS
- .IFE
-
- ;*** ENTRYPOINT()
-
- ENTRY╨OINT = *
- LDA #0
- PHA
- PLP
- LDA #BK┴├┼
- STA BK╙ELECT
- JMP MAIN
-
- ;*** STARTUP()
-
- ACE┬OOTSTRAP = *
- PHP
- SEI
- LDX #2
- - LDA $00,X
- STA BASIC┌P╙AVE,X
- LDA #0
- STA $00,X
- INX
- CPX #MAX┌P╒SE
- BCC -
- LDA #<IRQ╚ANDLER
- LDY #>IRQ╚ANDLER
- STA $314
- STY $315
- LDA #<BRK╚ANDLER
- LDY #>BRK╚ANDLER
- STA $316
- STY $317
- LDA #<NMI╚ANDLER
- LDY #>NMI╚ANDLER
- STA $318
- STY $319
- LDX #127
- LDA #0
- - STA ERRNO,X
- DEX
- BPL -
- LDA #$04 ;"A:"
- STA ACE├URRENT─EVICE
- LDA #0
- JSR KERNEL╙ETMSG
- .IF COMPUTER-64
- LDA #0
- LDX #0
- JSR KERNEL╙ETBNK
- .IFE
- JSR KERNEL├LALL
- PLP
- RTS
-
- ACE├ONFIG = *
- LDA #0
- LDX BOOT─EVICE
- LDY #0
- JSR KERNEL╙ETLFS
- LDA #6
- LDX #<ACE├ONFIG╬AME
- LDY #>ACE├ONFIG╬AME
- JSR KERNEL╙ETNAM
- LDA #0
- LDX #<ACE┴PP┴DDRESS
- LDY #>ACE┴PP┴DDRESS
- JSR KERNEL╠OAD
- BCC +
- RTS
- + LDA #<CONFIG┬UF
- LDY #>CONFIG┬UF
- STA 2
- STY 3
- LDA #<ACE╙TARTUP═SG
- LDY #>ACE╙TARTUP═SG
- STA 4
- STY 5
- LDA #<RAM0╞REE═AP
- LDY #>RAM0╞REE═AP
- STA 6
- STY 7
- LDX #>ACE┬SS┼ND
- LDA #<ACE┬SS┼ND
- BEQ +
- INX
- + STX 8
- .IF COMPUTER-64
- LDA #128
- .ELSE
- LDA #64
- .IFE
- STA 9
- LDA #<CHARSET4BIT
- LDY #>CHARSET4BIT
- STA 10
- STY 11
- JSR ACE┴PP┴DDRESS
- RTS
- ACE├ONFIG╬AME = *
- .ASC "CONFIG"
-
- ACE╙TARTUP = *
- LDX #FCB├OUNT-1
- LDA #LFNULL
- - STA LFTABLE,X
- DEX
- BPL -
- LDA #0
- STA NEWLF
- LDA ACE├URRENT─EVICE
- LSR
- LSR
- ORA #$40
- STA ACE├UR─IR╬AME+0
- LDA #":"
- STA ACE├UR─IR╬AME+1
- LDA #0
- STA ACE├UR─IR╬AME+2
- JSR INIT╙TACK
- LDX #31
- - LDA CONFIG┬UF+$E0,X
- STA ACE╙HELL╨ATH,X
- DEX
- BPL -
- LDA #0
- STA ACE╙HELL┴LIAS
- LDA #1
- STA ACE╨ROCESS╔─
- RTS
-
- INIT╙TACK = *
- LDA #ACE╔─1
- STA ACE╔─+0
- LDA #ACE╔─2
- STA ACE╔─+1
- LDA #0
- .IF COMPUTER-64
- LDY CONFIG┬UF+$A8
- .ELSE
- LDY CONFIG┬UF+$C6
- .IFE
- CPY #MAX╨AGE
- BCC +
- LDY #MAX╨AGE
- + STA ACE╙TACK╘OP+0
- STY ACE╙TACK╘OP+1
- STA ACE═EM╘OP+0
- STY ACE═EM╘OP+1
- STA ACE╞RAME╨TR+0
- STY ACE╞RAME╨TR+1
- RTS
-
- ;*** SHUTDOWN()
-
- ACE╙HUTDOWN = *
- LDX #2
- - LDA BASIC┌P╙AVE,X
- STA $00,X
- INX
- CPX #MAX┌P╒SE
- BCC -
- LDA #BK╦ERNEL
- STA BK╙ELECT
- PHP
- SEI
- LDA #<KERNEL╔RQ╚ANDLER
- LDY #>KERNEL╔RQ╚ANDLER
- STA $314
- STY $315
- LDA #<KERNEL┬RK╚ANDLER
- LDY #>KERNEL┬RK╚ANDLER
- STA $316
- STY $317
- LDA #<KERNEL╬MI╚ANDLER
- LDY #>KERNEL╬MI╚ANDLER
- STA $318
- STY $319
- .IF COMPUTER-64
- .ELSE
- LDA #%10000001
- STA $DC0D
- LDA #%01111111
- STA $DD0D
- BIT $DC0D
- BIT $DD0D
- LDA #%00000000
- STA VIC+$1A
- .IFE
- PLP
- RTS
-
- ACE╙HUTDOWN┬ASIC = *
- .IF COMPUTER-64
- JSR VDC╙HUTDOWN
- JSR VIC╙HUTDOWN
- LDA TEXT═ODE
- EOR $D7
- BPL +
- JSR KERNEL╙WAPPER
- + NOP
- .ELSE
- LDA #25
- LDX #40
- ;XX CHECK CONFIG FOR SCREEN
- JSR CONSCREEN
- .IFE
- JSR ACE╙HUTDOWN
- LDA #147
- JSR KERNEL├HROUT
- .IF COMPUTER-64
- LDA #0
- STA $F8
- STA $F9
- LDA #$16
- STA 2604
- STA $D018
- LDA #0
- STA $1C00
- STA 208
- JSR $51D6
- JMP $4DB7
- .ELSE
- LDA #$16
- STA $D018
- LDA #0
- STA $800
- STA 198
- JSR $A642
- JMP $A474
- .IFE
- BRK
-
- RESET╔NT─ISPATCH = * ;FOR ├64 ONLY, ╥┴═0
- LDX #$FF
- SEI
- TXS
- CLD
- LDA #BK╦ERNEL
- STA BK╙ELECT
- JMP $FCE2
-
- NMI╔NT─ISPATCH = * ;FOR ├64 ONLY, ╥┴═0
- SEI
-
- NMI╚ANDLER = *
- .IF COMPUTER-64
- CLD
- LDA #$7F
- STA $DD0D
- LDY $DD0D
- BMI +
- ;** SET BANK BK┴├┼ BEFORE CALLING HIGHER ROUTINES
- - LDA $DC01
- CMP $DC01
- BNE -
- AND #$80
- BMI +
- JSR ACE╙HUTDOWN
- JSR $E056
- JSR $E109
- JSR $C000
- LDA #0
- STA $1C00
- JSR $51D6
- JMP ($0A00)
- + JMP $FF33
- .ELSE
- CLD
- PHA
- TXA
- PHA
- TYA
- PHA
- LDA BK╙ELECT
- PHA
- LDA #BK╦ERNEL
- STA BK╙ELECT
- LDA #$7F
- STA $DD0D
- LDY $DD0D
- BMI +
- - LDA $DC01
- CMP $DC01
- BNE -
- AND #$80
- BMI +
- JSR ACE╙HUTDOWN
- JSR $FD15
- JSR $FDA3
- JSR $E518
- LDA #0
- STA $800
- JSR $A642
- JMP ($A002)
- + PLA
- STA BK╙ELECT
- PLA
- TAY
- PLA
- TAX
- PLA
- RTI
- .IFE
-
- ACE╔RQ╔NIT = *
- PHP
- SEI
- .IF COMPUTER-64
- .ELSE
- LDX #5
- - LDA C64╔NT╓ECS,X
- STA $FFFA,X
- DEX
- BPL -
- .IFE
- LDA #<IRQ╚ANDLER
- LDY #>IRQ╚ANDLER
- STA $314
- STY $315
- LDA #%01111111
- STA $DC0D
- STA $DD0D
- BIT $DC0D
- BIT $DD0D
- LDA VIC+$11
- AND #%01111111
- ORA #%00000000
- STA VIC+$11
- LDA #252
- STA VIC+$12
- LDA #%00000000
- STA VIC+$1A
- LDA #%10001111
- STA VIC+$19
- PLP
- RTS
-
- C64╔NT╓ECS = *
- .WORD NMI╔NT─ISPATCH,RESET╔NT─ISPATCH,IRQ╔NT─ISPATCH
-
- IRQ╔NT─ISPATCH = * ;FOR ├64 ONLY, ╥┴═0
- PHA
- TXA
- PHA
- TYA
- PHA
- LDA BK╙ELECT
- PHA
- LDA #BK╦ERNEL
- STA BK╙ELECT
- CLD
- TSX
- LDA $0105,X
- AND #$10
- BEQ IRQ╚ANDLER╔NT64
- JMP BRK╚ANDLER
-
- IRQ╚ANDLER = * ;(.┴╪┘ ALREADY SAVED, 128 BANK)
- CLD
- .IF COMPUTER-64
- .ELSE
- LDA BK╙ELECT
- PHA
- .IFE
- IRQ╚ANDLER╔NT64 = *
- LDA #BK┴├┼
- STA BK╙ELECT
- LDA VIC+$19
- BPL +
- AND #1
- BNE SIXTY
- + LDA $DC0D
- JMP IRQ┼XIT
-
- SIXTY = *
- STA VIC+$19
- JSR CON╙CREEN╙AVE
- JSR VIC╔RQ├URSOR
- JSR VDC╔RQ├URSOR
- JSR CON╔RQ╦EYSCAN
- JMP IRQ┼XIT
-
- .IF COMPUTER-64
- IRQ┼XIT = $FF33
- .ELSE
- IRQ┼XIT = *
- PLA
- STA BK╙ELECT
- PLA
- TAY
- PLA
- TAX
- PLA
- RTI
- .IFE
-
- BRK╚ANDLER = *
- CLD
- LDX #0
- - LDA $00,X
- STA $0400,X
- DEX
- BNE -
- JSR ACE╙HUTDOWN
- .IF COMPUTER-64
- LDA #0
- STA $1C00
- ;JSR $51D6
- .ELSE
- LDA #0
- STA $800
- JSR $A642
- .IFE
- JMP KERNEL┬RK╚ANDLER
-
- ;*** GET─EVICE( ZP=FILENAME┌ ) : .┴=DEVICE, .┘=SCAN╨OS
-
- GET─EVICE = *
- LDY #0
- LDA (ZP),Y
- BEQ USE─EFAULT
- LDY #1
- LDA (ZP),Y
- CMP #":"
- BNE USE─EFAULT
- LDY #0
- LDA (ZP),Y
- LDY #2
- CMP #"."
- BNE +
- LDA ACE├URRENT─EVICE
- JMP GOT─EV
- + AND #$1F
- ASL
- ASL
- JMP GOT─EV
-
- USE─EFAULT = *
- LDA ACE├URRENT─EVICE
- LDY #0
-
- GOT─EV = *
- RTS
-
- GET╠F┴ND╞CB = * ;() : .╪=FCB, .┴=LF
- OPEN╠F╙EARCH = *
- INC NEWLF
- LDA NEWLF
- AND #$7F
- LDX #FCB├OUNT-1
- - CMP LFTABLE,X
- BEQ OPEN╠F╙EARCH
- DEX
- BPL -
- TAY
- LDX #0
- - LDA LFTABLE,X
- BMI +
- INX
- CPX #FCB├OUNT
- BCC -
- LDA #ACE┼RR╘OO═ANY╞ILES
- STA ERRNO
- SEC
- RTS
- + LDA ACE╨ROCESS╔─
- STA PIDTABLE,X
- TYA
- CLC
- RTS
-
- ;*** ISDIR( (ZP)=╞ILENAME┌ ) : .┴=─EV, .╪=IS─ISK, .┘=IS─IR
-
- ACE╔SDIR = *
- JSR GET─EVICE
- PHA
- TAX
- LDA CONFIG┬UF+0,X
- CMP #1
- BEQ +
- CMP #4
- BEQ +
- LDX #FALSE
- LDY #FALSE
- JMP IS─IR┼XIT
- LDX #TRUE
- + LDY #255
- - INY
- LDA (ZP),Y
- BNE -
- DEY
- LDA (ZP),Y
- LDY #TRUE
- CMP #":"
- BEQ IS─IR┼XIT
- LDY #FALSE
-
- IS─IR┼XIT = *
- PLA
- RTS
-
- ;*** OPEN( ZP=FILENAME┌, .┴=MODE["R","W","A"] ) : .┴=FCB
-
- OPEN╞CB = SYSWORK+0
- OPEN╬AME╙CAN = SYSWORK+1
- OPEN═ODE = SYSWORK+2
- OPEN╬AME╠ENGTH = SYSWORK+3
- OPEN─EVICE = SYSWORK+4
- CHECK╙TAT .BUF 1
-
- ACE╧PEN = *
- STA OPEN═ODE
- LDA #TRUE
- STA CHECK╙TAT
- JSR GET╠F┴ND╞CB
- BCC +
- RTS
- + STA LFTABLE,X
- LDA #$00
- STA EOFTABLE,X
- STX OPEN╞CB
- JSR GET─EVICE
- STY OPEN╬AME╙CAN
- LDX OPEN╞CB
- STA DEVTABLE,X
- STA OPEN─EVICE
- TAX
-
- ;GET SA HERE
- LDA CONFIG┬UF+0,X
- CMP #0
- BNE +
- LDY CONFIG┬UF+2,X
- JMP NON─ISK╙A
- + LDY #0
- CMP #1
- BEQ OPEN─ISK╙A
- ;** CHECK CONSOLE
- CMP #2
- BNE +
- - LDA OPEN╞CB
- CLC
- RTS
- ;** CHECK NULL DEVICE
- + CMP #3
- BEQ -
- ;** CHECK RAMDISK DEVICE
- CMP #4
- BNE +
- JMP RD╧PEN
- ;** ILLEGAL DEVICE
- + LDA #ACE┼RR╔LLEGAL─EVICE
- STA ERRNO
- SEC
- RTS
-
- OPEN─ISK╙A = *
- LDY #2
- DISK╙A╙EARCH = *
- LDX #FCB├OUNT-1
- - LDA LFTABLE,X
- BMI +
- LDA DEVTABLE,X
- CMP OPEN─EVICE
- BNE +
- TYA
- CMP SATABLE,X
- BNE +
- INY
- BNE DISK╙A╙EARCH
- + DEX
- BPL -
-
- NON─ISK╙A = *
- LDX OPEN╞CB
- TYA
- STA SATABLE,X
-
- ;SET THE NAME
- LDX #0
- LDY OPEN╬AME╙CAN
- - LDA (ZP),Y
- STA STRING┬UFFER,X
- BEQ +
- INY
- INX
- BNE -
- + LDY OPEN─EVICE
- LDA CONFIG┬UF+0,Y
- CMP #1
- BNE NON─ISK╧PEN
- ;** STICK THE MODE FOR DISK FILES
- CPX #0
- BNE +
- LDA #ACE┼RR╧PEN─IRECTORY
- SEC
- RTS
- + LDA #","
- STA STRING┬UFFER,X
- INX
- LDA OPEN═ODE
- STA STRING┬UFFER,X
- INX
- JMP OPEN╟OT╬AME
-
- ;** GET RID OF THE FILENAME FOR NON-DISKS
- NON─ISK╧PEN = *
- LDX #0
-
- OPEN╟OT╬AME = *
- ;** DISPATCH HERE FOR NON-KERNEL DEVICES
- TXA
- LDX #<STRING┬UFFER
- LDY #>STRING┬UFFER
- JSR KERNEL╙ETNAM
-
- ;SET LFS
- LDX OPEN╞CB
- LDA LFTABLE,X
- PHA
- LDA SATABLE,X
- TAY
- LDA DEVTABLE,X
- TAX
- LDA CONFIG┬UF+1,X
- TAX
- PLA
- JSR KERNEL╙ETLFS
-
- ;DO THE OPEN
- JSR KERNEL╧PEN
- BCS OPEN┼RROR
- + LDX OPEN─EVICE
- LDA CONFIG┬UF+0,X
- CMP #1
- BNE +
- LDA CHECK╙TAT
- BEQ +
- TXA
- JSR OPEN─ISK╙TATUS
- BCC +
-
- OPEN┼RROR = *
- STA ERRNO
- LDX OPEN╞CB
- LDA LFTABLE,X
- CLC
- JSR KERNEL├LOSE
- LDX OPEN╞CB
- LDA #LFNULL
- STA LFTABLE,X
- SEC
- LDA #FCB╬ULL
- RTS
- + LDA OPEN╞CB
- CLC
- RTS
-
- OPEN─ISK╙TATUS = * ;( .┴=DEVICE ) : ERRNO=.┴=ERRCODE, .├╙=ERRFLAG
- JSR CMDCH╧PEN
- BCS +
- JSR CHECK─ISK╙TATUS
- PHP
- PHA
- JSR CMDCH├LOSE
- PLA
- PLP
- + RTS
-
- CMDCH╧PEN = * ;( .┴=DEVICE )
- PHA
- JSR CMDCH├LOSE
- PLA
- TAX
- LDA CONFIG┬UF+1,X
- TAX
- LDY #15
- LDA #LFNULL
- JSR KERNEL╙ETLFS
- LDA #0
- JSR KERNEL╙ETNAM
- JSR KERNEL╧PEN
- BCC +
- STA ERRNO
- + RTS
-
- CMDCH╙END = * ;( STRING┬UFFER )
- LDX #LFNULL
- JSR KERNEL├HKOUT
- BCS CMDCH┼RR
- LDX #0
- - LDA STRING┬UFFER,X
- BEQ +
- JSR KERNEL├HROUT
- BCS CMDCH┼RR
- INX
- BNE -
- + JSR KERNEL├LRCHN
- CLC
- RTS
-
- CMDCH┼RR = *
- STA ERRNO
- PHA
- JSR KERNEL├LRCHN
- PLA
- SEC
- RTS
-
- CHECK─ISK╙TATUS├ODE .BUF 1
-
- CHECK─ISK╙TATUS = *
- LDX #LFNULL
- JSR KERNEL├HKIN
- BCS CMDCH┼RR
- JSR KERNEL├HRIN
- BCS CMDCH┼RR
- AND #$0F
- STA CHECK─ISK╙TATUS├ODE
- ASL
- ASL
- ADC CHECK─ISK╙TATUS├ODE
- ASL
- STA CHECK─ISK╙TATUS├ODE
- JSR KERNEL├HRIN
- BCS CMDCH┼RR
- AND #$0F
- CLC
- ADC CHECK─ISK╙TATUS├ODE
- STA CHECK─ISK╙TATUS├ODE
- - JSR KERNEL╥EADST
- AND #$80
- BEQ +
- LDA #ACE┼RR─EVICE╬OT╨RESENT
- SEC
- BCS CMDCH┼RR
- + JSR KERNEL├HRIN
- BCS CMDCH┼RR
- CMP #CHR├╥
- BNE -
- JSR KERNEL├LRCHN
- LDA CHECK─ISK╙TATUS├ODE
- CMP #62
- BNE +
- LDA #ACE┼RR╞ILE╬OT╞OUND
- STA ERRNO
- SEC
- RTS
- + CMP #20
- BCC +
- STA ERRNO
- + RTS
-
- CMDCH├LOSE = *
- SEC
- LDA #LFNULL
- JSR KERNEL├LOSE
- BCC +
- STA ERRNO
- + RTS
-
- ;*** CLOSE( .┴=FCB )
-
- CLOSE╞D .BUF 1
-
- ACE├LOSE = *
- TAX
- LDA PIDTABLE,X
- CMP ACE╨ROCESS╔─
- BEQ +
- CLC
- RTS
- + LDY DEVTABLE,X
- STX CLOSE╞D
- LDA CONFIG┬UF+0,Y
- CMP #2
- BNE +
- JMP CLOSE╞D┼NTRY
- + CMP #3
- BNE +
- JMP CLOSE╞D┼NTRY
- + CMP #4
- BNE +
- JSR RD├LOSE
- JMP CLOSE╞D┼NTRY
- + LDX CLOSE╞D
- LDA LFTABLE,X
- JSR KERNEL├LOSE
-
- CLOSE╞D┼NTRY = *
- LDX CLOSE╞D
- LDA #LFNULL
- STA LFTABLE,X
- CLC
- RTS
-
- ;*** READ( .╪=FCB, (ZP)=DATA, .┴┘=MAX╠ENGTH ) : .┴┘=(ZW)=LENGTH, .┌=EOF
-
- READ═AX╠EN = SYSWORK+0
- READ╨TR = SYSWORK+2
- READ╠ENGTH = SYSWORK+4
- READ╞CB = SYSWORK+6
- READ─EVICE─ISK = SYSWORK+7
-
- ACE╥EAD = *
- STA READ═AX╠EN+0
- STY READ═AX╠EN+1
- STX READ╞CB
- LDA ZP+0
- LDY ZP+1
- STA READ╨TR+0
- STY READ╨TR+1
- LDA #0
- STA READ╠ENGTH+0
- STA READ╠ENGTH+1
- LDA EOFTABLE,X
- BNE READ┼OF┼XIT
- LDY #0
- LDA DEVTABLE,X
- TAX
- LDA CONFIG┬UF+0,X
- CMP #4
- BNE +
- JMP RD╥EAD
- + CMP #2
- BNE +
- LDA READ═AX╠EN+0
- LDY READ═AX╠EN+1
- LDX READ╞CB
- JMP CON╥EAD
- + CMP #3
- BNE +
- LDA #0
- LDY #0
- STA ZW+0
- STY ZW+1
- CLC
- RTS
- + CMP #1
- BNE +
- LDY #$FF
- + LDX READ╞CB
- STY READ─EVICE─ISK
- LDA LFTABLE,X
- TAX
- JSR KERNEL├HKIN
- BCC READ┬YTE
- STA ERRNO
- RTS
-
- READ┬YTE = *
- LDA READ╠ENGTH+0
- CMP READ═AX╠EN+0
- LDA READ╠ENGTH+1
- SBC READ═AX╠EN+1
- BCS READ┼XIT
- JSR KERNEL├HRIN
- LDY #0
- STA (READ╨TR),Y
- INC READ╨TR+0
- BNE +
- INC READ╨TR+1
- + INC READ╠ENGTH+0
- BNE +
- INC READ╠ENGTH+1
- + BIT READ─EVICE─ISK
- BPL READ┬YTE
- LDA ST
- AND #$40
- BEQ READ┬YTE
- LDX READ╞CB
- STA EOFTABLE,X
-
- READ┼XIT = *
- JSR KERNEL├LRCHN
- READ┼XIT╬OCLR = *
- LDA READ╠ENGTH+0
- LDY READ╠ENGTH+1
- STA ZW+0
- STY ZW+1
- LDX #$FF
- CLC
- RTS
-
- READ┼OF┼XIT = *
- LDA #0
- LDY #0
- + STA ZW+0
- STY ZW+1
- CLC
- RTS
-
- ;*** WRITE( .╪=FCB, (ZP)=DATA, .┴┘=LENGTH )
-
- WRITE╠ENGTH = SYSWORK+0
- WRITE╨TR = SYSWORK+2
-
- ACE╫RITE = *
- STA WRITE╠ENGTH+0
- STY WRITE╠ENGTH+1
- LDA ZP+0
- LDY ZP+1
- STA WRITE╨TR+0
- STY WRITE╨TR+1
- STX REGSAVE+1
- LDA DEVTABLE,X
- TAX
- LDA CONFIG┬UF+0,X
- ;** CHECK RAMDISK
- CMP #4
- BNE +
- JMP RD╫RITE
- ;** CHECK CONSOLE
- + CMP #2
- BNE +
- LDA WRITE╠ENGTH+0
- LDY WRITE╠ENGTH+1
- LDX REGSAVE+1
- JMP CON╫RITE
- ;** CHECK NULL DEVICE
- + CMP #3
- BNE +
- CLC
- RTS
- + LDX REGSAVE+1
- LDA LFTABLE,X
- TAX
- JSR KERNEL├HKOUT
- BCC WRITE┬YTE
- RTS
-
- WRITE┬YTE = *
- LDA WRITE╠ENGTH+0
- ORA WRITE╠ENGTH+1
- BEQ WRITE╞INISH
- LDY #0
- LDA (WRITE╨TR),Y
- JSR KERNEL├HROUT
- BCC +
- STA ERRNO
- JSR KERNEL├LRCHN
- SEC
- RTS
- + INC WRITE╨TR+0
- BNE +
- INC WRITE╨TR+1
- + LDA WRITE╠ENGTH+0
- BNE +
- DEC WRITE╠ENGTH+1
- + DEC WRITE╠ENGTH+0
- JMP WRITE┬YTE
-
- WRITE╞INISH = *
- JSR KERNEL├LRCHN
- CLC
- RTS
-
- ;*** CMDOPEN( (ZP)=─EV╬AME ) : .┴=╞CB
-
- GET─ISK─EVICE = * ;( (ZP)=DEVNAME ) : .┴=DEVICE, .┘=SCAN, .╪=DEV_T, .├├=IS─ISK
- JSR GET─EVICE
- PHA
- TAX
- LDA CONFIG┬UF+0,X
- CMP #1
- BNE +
- - TAX
- PLA
- CLC
- RTS
- + CMP #4
- BEQ -
- PLA
- LDA #ACE┼RR─ISK╧NLY╧PERATION
- STA ERRNO
- SEC
- RTS
-
- ACE├MD╧PEN = *
- JSR GET─ISK─EVICE
- BCC +
- RTS
- + STA OPEN─EVICE
- JSR GET╠F┴ND╞CB
- BCC +
- RTS
- + STA LFTABLE,X
- STX OPEN╞CB
- LDA OPEN─EVICE
- STA DEVTABLE,X
- LDA #0
- STA EOFTABLE,X
- LDA #15
- STA SATABLE,X
- STX OPEN╞CB
- LDA #0
- STA STRING┬UFFER
- LDA #FALSE
- STA CHECK╙TAT
- LDX #0
- JSR OPEN╟OT╬AME
- BCC +
- RTS
- + LDA ST
- AND #$80
- BEQ +
- LDA #ACE┼RR─EVICE╬OT╨RESENT
- STA ERRNO
- SEC
- RTS
- + LDA OPEN╞CB
- RTS
-
- ;*** CMDCLOSE( .┴=FCB )
-
- ACE├MD├LOSE = *
- TAX
- LDA LFTABLE,X
- PHA
- LDA #LFNULL
- STA LFTABLE,X
- PLA
- SEC
- JMP KERNEL├LOSE
-
- ;*** CMDSEND( .╪=╞CB, .┴┘=├MD )
-
- ACE├MD╙END = *
- STA SYSWORK+0
- STY SYSWORK+1
- LDA LFTABLE,X
- TAX
- JSR KERNEL├HKOUT
- BCC +
- STA ERRNO
- RTS
- + LDY #0
- - LDA (SYSWORK),Y
- BEQ +
- JSR KERNEL├HROUT
- BCS ++
- INY
- BNE -
- + JSR KERNEL├LRCHN
- CLC
- RTS
- + STA ERRNO
- JSR KERNEL├LRCHN
- SEC
- RTS
-
- ;*** CMDSTATUS( .╪=╞CB, .┴┘=╙TATUS┬UF ) : ╙TATUS┬UF, .┴=STATUS├ODE
-
- ACE├MD╙TATUS = *
- STA SYSWORK+0
- STY SYSWORK+1
- LDA LFTABLE,X
- TAX
- JSR KERNEL├HKIN
- BCC +
- - STA ERRNO
- JSR KERNEL├LRCHN
- SEC
- RTS
- + LDY #0
- - JSR KERNEL├HRIN
- BCS --
- CMP #$0D
- BEQ +
- STA (SYSWORK),Y
- INY
- JSR KERNEL╥EADST
- AND #$40
- BEQ -
- + LDA #0
- STA (SYSWORK),Y
- JSR KERNEL├LRCHN
- LDY #0
- LDA (SYSWORK),Y
- AND #$0F
- ASL
- ASL
- ADC (SYSWORK),Y
- ASL
- STA SYSWORK+3
- INY
- LDA (SYSWORK),Y
- AND #$0F
- ADC SYSWORK+3
- CLC
- RTS
-
- DEV╘ABLE╔NIT = *
- LDX #0
- LDA #ACE═EM╬ULL
- - STA DEVICE╘ABLE,X
- INX
- BNE -
- RTS
-
- .SEQ ACECALL.S
- .SEQ ACEMEM.S
- .SEQ ACECON.S
- .SEQ ACERD.S
-
- ;*** SCREEN CALLS
-
- TEXT═ODE .BUF 1
-
- .IF COMPUTER-64
- .SEQ ACEVDC.S
- .SEQ ACEVIC.S
- .ELSE
- .SEQ ACEVIC80.S
- .SEQ ACEVIC.S
- .IFE
-
- SCREEN╔NIT = *
- LDA #0
- STA TEXT═ODE
- .IF COMPUTER-64
- JSR VDC╔NIT
- JSR VIC╔NIT
- LDX #80
- BIT $D7
- BMI +
- LDX #40
- + LDA #0
- JSR CONSCREEN
- .ELSE
- JSR VDC╙TARTUP
- JSR VIC╔NIT
- LDX #40
- BIT CONFIG┬UF+$C0
- BVC +
- LDX #80
- + LDA #0
- JSR CONSCREEN
- .IFE
- RTS
-
- ACE╫INMAX = *
- BIT TEXT═ODE
- BMI +
- JMP VIC╫INMAX
- + JMP VDC╫INMAX
- ACE╫INCLS = *
- BIT TEXT═ODE
- BMI +
- JMP VIC╫INCLS
- + JMP VDC╫INCLS
- ACE╫INSET = *
- BIT TEXT═ODE
- BMI +
- JMP VIC╫INSET
- + JMP VDC╫INSET
- ACE╫INSIZE = *
- BIT TEXT═ODE
- BMI +
- JMP VIC╫INSIZE
- + JMP VDC╫INSIZE
- ACE╫INPUT = *
- BIT TEXT═ODE
- BMI +
- JMP VIC╫INPUT
- + JMP VDC╫INPUT
- ACE╫INCOLOR = *
- BIT TEXT═ODE
- BMI +
- JMP VIC╫INCOLOR
- + JMP VDC╫INCOLOR
- ACE╫INPOS = *
- BIT TEXT═ODE
- BMI +
- JMP VIC╫INPOS
- + JMP VDC╫INPOS
- ACE╫INCURSOR = *
- BIT TEXT═ODE
- BMI +
- JMP VIC╫INCURSOR
- + JMP VDC╫INCURSOR
- ACE╫INSCROLL = *
- BIT TEXT═ODE
- BMI +
- JMP VIC╫INSCROLL
- + JMP VDC╫INSCROLL
-
- ;*** MAIN()
-
- BOOT─EVICE .BUF 1
- TITLE╨TR .BUF 2
- TITLE╠EN .BUF 2
- EXIT├LS .BYTE 0
-
- MAIN = *
- LDA 186
- STA BOOT─EVICE
- LDA #147
- JSR KERNEL├HROUT
- LDA #14
- JSR KERNEL├HROUT
- LDX #0
- - LDA ACE╙TARTUP═SG,X
- BEQ +
- JSR KERNEL├HROUT
- INX
- BNE -
- + SEI
- JSR ACE┬OOTSTRAP
- JSR ACE╔RQ╔NIT
- JSR INIT═EMORY
- JSR ACE├ONFIG
- BCC +
- JMP MAIN┼XIT
- + LDA 2
- LDY 3
- STA TITLE╨TR+0
- STY TITLE╨TR+1
- LDA 4
- LDY 5
- STA TITLE╠EN+0
- STY TITLE╠EN+1
- JSR ACE╙TARTUP
- JSR INIT═EMORY┴LLOC
- SEI
- JSR SCREEN╔NIT
- JSR CON╔NIT
- JSR DEV╘ABLE╔NIT
- JSR RD╔NIT
- LDA #%00000001
- STA VIC+$1A
- CLI
- LDA #$FF
- STA EXIT├LS
-
- ;** OPEN STD FILES
- LDA #<CONFIG┬UF+$90
- LDY #>CONFIG┬UF+$91
- STA ZP+0
- STY ZP+1
- JSR CHDIR
- LDA #<STDIN╬AME
- LDY #>STDIN╬AME
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN ;FCB=0
- LDA #<STDOUT╬AME
- LDY #>STDOUT╬AME
- STA ZP
- STY ZP+1
- LDA #"W"
- JSR OPEN ;FCB=1
- LDA #"W"
- JSR OPEN ;FCB=2
- LDA TITLE╨TR+0
- LDY TITLE╨TR+1
- STA ZP+0
- STY ZP+1
- LDA TITLE╠EN+0
- LDY TITLE╠EN+1
- LDX #STDOUT
- JSR WRITE
- CLI
-
- ;** CALL SHELL
- LDA ACE═EM╘OP+0
- LDY ACE═EM╘OP+1
- SEC
- SBC #7
- BCS +
- DEY
- + STA ZW+0
- STY ZW+1
- LDY #6
- - LDA STARTUP┴RGS,Y
- STA (ZW),Y
- DEY
- BPL -
- LDY #0
- CLC
- LDA ZW+0
- ADC #4
- STA (ZW),Y
- INY
- LDA ZW+1
- ADC #0
- STA (ZW),Y
- LDA #<ACE╙HELL┴DDRESS
- LDY #>ACE╙HELL┴DDRESS
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JSR EXECSUB
-
- ;** EXIT
- MAIN┼XIT = *
- LDA #STDIN
- JSR CLOSE
- LDA #STDOUT
- JSR CLOSE
- LDA #STDERR
- JSR CLOSE
- LDA BOOT─EVICE
- STA 186
- JSR SHUTDOWN═EMORY
- BIT EXIT├LS
- BPL +
- LDA #147
- JSR KERNEL├HROUT
- + JMP ACE╙HUTDOWN┬ASIC
-
- STDOUT╬AME .ASC "S:"
- .BYTE 0
- STDIN╬AME .ASC "K:"
- .BYTE 0
-
- STARTUP┴RGS .BYTE 0,0,0,0,"S","H",0
-
- ACE╙TARTUP═SG = *
- .IF COMPUTER-64
- .ASC "┴├┼-128 "
- .ELSE
- .ASC "┴├┼-64 "
- .IFE
- .ASC "╦ERNEL 0.76.00 - ├╙┬ 09-╙EP-94"
- .BYTE CHR├╥,CHR├╥,0
-
- ;*** BSS: C128=1536 BYTES, C64=512 BYTES
-
- ACE┬SS = *
- .IF COMPUTER-64
- CHARSET4BIT = ACE┬SS+0 ;(0 BYTES)
- STRING┬UFFER = ACE┬SS+0
- RAM0╞REE═AP = STRING┬UFFER+256
- FREEMAP = RAM0╞REE═AP+256
- DEVICE╘ABLE = FREEMAP+256
- BASIC┌P╙AVE = DEVICE╘ABLE+256
- WORKBUF = BASIC┌P╙AVE+256
- ACE┬SS┼ND = WORKBUF+256
- .ELSE
- DEVICE╘ABLE = ACE┬SS+0
- BASIC┌P╙AVE = DEVICE╘ABLE+256
- ACE┬SS┼ND = BASIC┌P╙AVE+256
- .IFE
-