home *** CD-ROM | disk | FTP | other *** search
Text File | 2019-04-13 | 17.3 KB | 1,205 lines |
- ;┴├┼-128/64 KERNEL ─YNAMIC ═EMORY & ╨ROCESS ROUTINES, BY ├RAIG ┬RUCE.
-
- ;*** MEMORY ROUTINES ***
-
- .IF COMPUTER-64
- COM├ODE┬UFFER = $200
- .IFE
- TEMP1 = $8F
-
- BK╙ELECT╥AM0 = $FF01
- REU = $DF00
- RL = $DE00
- RL╥EGS = $E0A9
- RL┼XEC = $FE1E
-
- ;***STARTUP
-
- INIT═EMORY = *
- .IF COMPUTER-64
- LDX #0
- - LDA COM├ODE╙TART,X
- STA COM├ODE┬UFFER,X
- INX
- CPX #COM├ODE┼ND-COM├ODE╙TART
- BCC -
- .IFE
- RTS
-
- SHUTDOWN═EMORY = *
- .IF COMPUTER-64
- LDX #0
- LDA #0
- - STA COM├ODE┬UFFER,X
- INX
- CPX #COM├ODE┼ND-COM├ODE╙TART
- BNE -
- .IFE
- RTS
-
- INTERN┬ANK├ONFIGS = *
- .IF COMPUTER-64
- .BYTE $3F,$7F,$BF,$FF,$BF,$FF,$BF,$FF,$3F
- .ELSE
- .BYTE $70,$70
- .IFE
-
- INTERN┬ANK╟ROUPS = *
- .IF COMPUTER-64
- .BYTE $04,$04,$04,$04,$14,$14,$24,$24,$04
- .IFE
-
- ;***COMMON CODE
-
- COM├ODE╙TART = *
- .IF COMPUTER-64
- .ELSE
- COM├ODE┬UFFER = COM├ODE╙TART
- .IFE
-
- COM┌P╠OAD = *
- STY TEMP1
- LDY MP+2
- .IF COMPUTER-64
- LDA INTERN┬ANK╟ROUPS,Y
- STA $D506
- .IFE
- LDA INTERN┬ANK├ONFIGS,Y
- STA BK╙ELECT
- LDY #0
- - LDA (MP),Y
- STA 0,X
- INX
- INY
- CPY TEMP1
- BCC -
- LDA #BK┴├┼
- STA BK╙ELECT
- CLC
- RTS
-
- COM┌P╙TORE = *
- STY TEMP1
- LDY MP+2
- .IF COMPUTER-64
- LDA INTERN┬ANK╟ROUPS,Y
- STA $D506
- .IFE
- LDA INTERN┬ANK├ONFIGS,Y
- STA BK╙ELECT
- LDY #0
- - LDA 0,X
- STA (MP),Y
- INX
- INY
- CPY TEMP1
- BCC -
- LDA #BK┴├┼
- STA BK╙ELECT
- CLC
- RTS
-
- COM├OPY╘O╥AM0 = *
- LDX MP+2
- .IF COMPUTER-64
- LDA INTERN┬ANK╟ROUPS,X
- STA $D506
- LDA INTERN┬ANK├ONFIGS,X
- TAX
- .ELSE
- LDA INTERN┬ANK├ONFIGS,X
- STA BK╙ELECT
- .IFE
- DEY
- BEQ +
- .IF COMPUTER-64
- - STX BK╙ELECT
- LDA (MP),Y
- STA BK╙ELECT╥AM0
- .ELSE
- - LDA (MP),Y
- .IFE
- STA (ZP),Y
- DEY
- BNE -
- .IF COMPUTER-64
- + STX BK╙ELECT
- LDA (MP),Y
- STA BK╙ELECT╥AM0
- .ELSE
- + LDA (MP),Y
- .IFE
- STA (ZP),Y
- LDA #BK┴├┼
- STA BK╙ELECT
- CLC
- RTS
-
- COM├OPY╞ROM╥AM0 = *
- LDX MP+2
- .IF COMPUTER-64
- LDA INTERN┬ANK╟ROUPS,X
- STA $D506
- LDA INTERN┬ANK├ONFIGS,X
- TAX
- .ELSE
- LDA INTERN┬ANK├ONFIGS,X
- STA BK╙ELECT
- .IFE
- DEY
- BEQ +
- .IF COMPUTER-64
- - STA BK╙ELECT╥AM0
- LDA (ZP),Y
- STX BK╙ELECT
- .ELSE
- - LDA (ZP),Y
- .IFE
- STA (MP),Y
- DEY
- BNE -
- .IF COMPUTER-64
- + STA BK╙ELECT╥AM0
- LDA (ZP),Y
- STX BK╙ELECT
- .ELSE
- + LDA (ZP),Y
- .IFE
- STA (MP),Y
- LDA #BK┴├┼
- STA BK╙ELECT
- CLC
- RTS
- COM├ODE┼ND = *
-
- ;*** ZPLOAD( [MP]=╙OURCE, .╪=┌P─EST, .┘=╠ENGTH ) : .├╙=ERR
-
- ACE┌P╠OAD = *
- LDA MP+3
- BEQ NULL╨TR┼RROR
- CMP #$02
- BCC +
- BNE ZP╠OAD╥╠
- JMP COM┌P╠OAD-COM├ODE╙TART+COM├ODE┬UFFER
- + STY REU+7
- LDY #$91
-
- ZERO╨AGE╥EU╧P = *
- LDA MP+2
- STA REU+6
- STX REU+2
- LDA #0
- STA REU+3
- STA REU+8
- LDA MP+0
- STA REU+4
- LDA MP+1
- STA REU+5
- .IF COMPUTER-64
- LDA VIC+$30
- LDX #$00
- STX VIC+$30
- .IFE
- STY REU+1
- .IF COMPUTER-64
- STA VIC+$30
- .IFE
- CLC
- RTS
-
- NULL╨TR┼RROR = *
- LDA #ACE┼RR╬ULL╨OINTER
- STA ERRNO
- SEC
- RTS
-
- ZP╠OAD╥╠ = *
- LDA #$91
- ZERO╨AGE╥L╧P = * ;( .┴=OPCODE, .╪=ZPADDR, .┘=LEN, [MP]=FAR╨TR )
- STA RAMLINK╧PCODE
- LDA #0
- STY RAMLINK╠ENGTH
- STA RAMLINK╠ENGTH+1
- STX RAMLINK╬EAR╨TR
- STA RAMLINK╬EAR╨TR+1
- JMP RAMLINK╧P
-
- RAMLINK╧PCODE .BUF 1
- RAMLINK╠ENGTH .BUF 2
- RAMLINK╬EAR╨TR .BUF 2
-
- RAMLINK╧P = * ;( [MP]=FAR╨TR, RAMLINK╬EAR╨TR, RAMLINK╠ENGTH, RAMLINK╧PCODE )
- JSR RL╥EGS
- LDA RAMLINK╧PCODE
- STA RL+1
- LDA RAMLINK╬EAR╨TR
- LDY RAMLINK╬EAR╨TR+1
- STA RL+2
- STY RL+3
- LDX #0
- LDA MP+3
- CMP #ACE═EM╥╠
- BEQ +
- LDX #4
- + LDA MP+0
- STA RL+4
- CLC
- LDA ACE╥AMLINK╙TART,X
- ADC MP+1
- STA RL+5
- LDA ACE╥AMLINK╙TART+1,X
- ADC MP+2
- STA RL+6
- LDA RAMLINK╠ENGTH
- LDY RAMLINK╠ENGTH+1
- STA RL+7
- STY RL+8
- LDA #0
- STA RL+10
- STA RL+16
- JSR RL┼XEC
- CLC
- RTS
-
- ;*** ZPSTORE( .╪=┌P╙OURCE, [MP]=─EST, .┘=╠ENGTH ) : .├╙=ERR
-
- ACE┌P╙TORE = *
- LDA MP+3
- BEQ NULL╨TR┼RROR
- CMP #$02
- BCC +
- BNE ZP╙TORE╥╠
- JMP COM┌P╙TORE-COM├ODE╙TART+COM├ODE┬UFFER
- + STY REU+7
- LDY #$90
- JMP ZERO╨AGE╥EU╧P
-
- ZP╙TORE╥╠ = *
- LDA #$90
- JMP ZERO╨AGE╥L╧P
-
- ;*** FETCH( [MP]=╞AR╙OURCE, (ZP)=╥AM0─EST, .┴┘=╠ENGTH )
-
- FETCH╠ENGTH .BUF 2
- FETCH╙AVE╙OURCE .BUF 1
- FETCH╙AVE─EST .BUF 1
-
- ACE╞ETCH = *
- LDX MP+3
- BEQ FETCH╬ULL╨TR┼RROR
- CPX #ACE═EM╔NTERNAL
- BCS +
- LDX #$91
- JMP DO╥EU
- + BNE FETCH╥╠
- CPY #0
- BNE FETCH╠ONG
- TAY
- BNE FETCH╨AGE
- CLC
- RTS
-
- FETCH╬ULL╨TR┼RROR = *
- JMP NULL╨TR┼RROR
-
- FETCH╨AGE = * ;( [MP]=FROM, (ZP)=TO, .┘=LEN(0=256) )
- LDX MP+2
- CPX #0
- BEQ +
- ;XX DON'T HAVE TO WORRY ABOUT THE 64 HAVING MORE THAN ONE BANK YET
- JMP COM├OPY╘O╥AM0-COM├ODE╙TART+COM├ODE┬UFFER
- .IF COMPUTER-64
- + STX BK╙ELECT╥AM0
- .ELSE
- + LDX #BK╥AM0
- STX BK╙ELECT
- .IFE
- DEY
- BEQ +
- - LDA (MP),Y
- STA (ZP),Y
- DEY
- BNE -
- + LDA (MP),Y
- STA (ZP),Y
- LDA #BK┴├┼
- STA BK╙ELECT
- CLC
- RTS
-
- FETCH╠ONG = *
- STA FETCH╠ENGTH
- STY FETCH╠ENGTH+1
- LDA MP+1
- STA FETCH╙AVE╙OURCE
- LDA ZP+1
- STA FETCH╙AVE─EST
- LDA FETCH╠ENGTH+1
- BEQ FETCH╠ONG┼XIT
- - LDY #0
- JSR FETCH╨AGE
- INC MP+1
- INC ZP+1
- DEC FETCH╠ENGTH+1
- BNE -
-
- FETCH╠ONG┼XIT = *
- LDY FETCH╠ENGTH
- BEQ +
- JSR FETCH╨AGE
- + LDA FETCH╙AVE╙OURCE
- STA MP+1
- LDA FETCH╙AVE─EST
- STA ZP+1
- CLC
- RTS
-
- FETCH╥╠ = *
- LDX #$91
- LARGE╥L╧P = *
- STX RAMLINK╧PCODE
- STA RAMLINK╠ENGTH+0
- STY RAMLINK╠ENGTH+1
- LDA ZP+0
- LDY ZP+1
- STA RAMLINK╬EAR╨TR+0
- STY RAMLINK╬EAR╨TR+1
- JMP RAMLINK╧P
-
- ;*** STASH( (ZP)=╥AM0╙OURCE, [MP]=╞AR─EST, .┴┘=LENGTH )
-
- STASH╠ENGTH .BUF 2
- STASH╙AVE╙OURCE .BUF 1
- STASH╙AVE─EST .BUF 1
-
- ACE╙TASH = *
- LDX MP+3
- BEQ STASH╬ULL╨TR┼RROR
- CPX #ACE═EM╔NTERNAL
- BCS +
- LDX #$90
- JMP DO╥EU
- + BNE STASH╥╠
- CPY #0
- BNE STASH╠ONG
- TAY
- BNE STASH╨AGE
- CLC
- RTS
-
- STASH╬ULL╨TR┼RROR = *
- JMP NULL╨TR┼RROR
-
- STASH╨AGE = *
- LDX MP+2
- CPX #0
- BEQ +
- ;XX DON'T HAVE TO WORRY ABOUT THE 64 HAVING MORE THAN ONE BANK YET
- JMP COM├OPY╞ROM╥AM0-COM├ODE╙TART+COM├ODE┬UFFER
- .IF COMPUTER-64
- + STX BK╙ELECT╥AM0
- .ELSE
- + LDX #BK╥AM0
- STX BK╙ELECT
- .IFE
- DEY
- BEQ +
- - LDA (ZP),Y
- STA (MP),Y
- DEY
- BNE -
- + LDA (ZP),Y
- STA (MP),Y
- LDA #BK┴├┼
- STA BK╙ELECT
- CLC
- RTS
-
- STASH╠ONG = *
- STA STASH╠ENGTH
- STY STASH╠ENGTH+1
- LDA ZP+1
- STA STASH╙AVE╙OURCE
- LDA MP+1
- STA STASH╙AVE─EST
- LDA STASH╠ENGTH+1
- BEQ STASH╠ONG┼XIT
- - LDY #0
- JSR STASH╨AGE
- INC MP+1
- INC ZP+1
- DEC STASH╠ENGTH+1
- BNE -
-
- STASH╠ONG┼XIT = *
- LDY STASH╠ENGTH
- BEQ +
- LDX MP+2
- JSR STASH╨AGE
- + LDA STASH╙AVE╙OURCE
- STA ZP+1
- LDA STASH╙AVE─EST
- STA MP+1
- CLC
- RTS
-
- STASH╥╠ = *
- LDX #$90
- JMP LARGE╥L╧P
-
- ;*** RAM0 LOAD/STORE(.╪) EXPANSION MEMORY [MP] <- -> (ZP) FOR .┴┘ BYTES
-
- DO╥EU = *
- STA REU+7
- STY REU+8
- LDA ZP+0
- LDY ZP+1
- STA REU+2
- STY REU+3
- LDA MP+0
- LDY MP+1
- STA REU+4
- STY REU+5
- LDA MP+2
- STA REU+6
- LDY VIC+$30
- LDA #0
- STA VIC+$30
- STX REU+1
- STY VIC+$30
- CLC
- RTS
-
- ;*** MEMORY ALLOCATION ROUTINES
-
- FREEMAP┬ANK .BUF 2
- FREEMAP─IRTY .BUF 1
- FREEMAP╨AGE .BUF 1
- SEARCH═IN╞AIL .BUF 8
-
- INIT═EMORY┴LLOC = *
- LDX #0
- LDY #0
- STX FREEMAP╨AGE
- STX FREEMAP─IRTY
- - LDA RAM0╞REE═AP,X
- STA FREEMAP,X
- BNE +
- INY
- + INX
- BNE -
- LDA #0
- LDY #ACE═EM╔NTERNAL
- STA FREEMAP┬ANK+0
- STY FREEMAP┬ANK+1
- LDA #$00
- LDX #0
- - STA SEARCH═IN╞AIL,X
- INX
- CPX #8
- BCC -
- CLC
- RTS
-
- FREEMAP┬ANK╙AVE .BUF 2
-
- GET╞REEMAP = * ;( .┴┘=BANK )
- CMP FREEMAP┬ANK+0
- BNE +
- CPY FREEMAP┬ANK+1
- BNE +
- RTS
-
- ;** SAVE OLD FREEMAP
- + STA FREEMAP┬ANK╙AVE+0
- STY FREEMAP┬ANK╙AVE+1
- LDA FREEMAP─IRTY
- BEQ +
- LDA FREEMAP┬ANK+0
- LDY FREEMAP┬ANK+1
- JSR LOCATE┬ANK╞REEMAP
- JSR SET┌P╞REEMAP
- JSR STASH
-
- ;** LOAD NEW FREEMAP
- + LDA FREEMAP┬ANK╙AVE+0
- LDY FREEMAP┬ANK╙AVE+1
- STA FREEMAP┬ANK+0
- STY FREEMAP┬ANK+1
- JSR LOCATE┬ANK╞REEMAP
- JSR SET┌P╞REEMAP
- JSR FETCH
- LDA #0
- STA FREEMAP─IRTY
- STA FREEMAP╨AGE
- RTS
-
- SET┌P╞REEMAP = * ;() : (ZP)=#FREEMAP, .┴┘=#256
- LDA #<FREEMAP
- LDY #>FREEMAP
- STA ZP+0
- STY ZP+1
- LDA #<256
- LDY #>256
- RTS
-
- LOCATE┬ANK╞REEMAP = * ;( .┴┘=BANK ) : [MP]
- STA MP+2
- STY MP+3
- LDA #<$FF00
- LDX #>$FF00
- STA MP+0
- STX MP+1
- CPY #ACE═EM╔NTERNAL
- BEQ +
- RTS
- + LDA MP+2
- BNE +
- ;** RAM0
- LDA ACE╥AM0╞REEMAP+0
- LDY ACE╥AM0╞REEMAP+1
- - STA MP+0
- STY MP+1
- RTS
- + CMP #1
- BNE +
- ;** RAM1
- LDA #0
- LDY ACE╥AM1╞REEMAP
- JMP -
- ;** EXP.INT.RAM
- + LDA #<$0400
- LDY #>$0400
- JMP -
-
- SEARCH╘YPE╙TART .BUF 1
- SEARCH╘YPE╙TOP .BUF 1
- SEARCH╙IZE .BUF 1
- ALLOC╨ROC╔─ .BUF 1
- SEARCH╘YPE╩MP = *
- .WORD 0,PAGE┴LLOC╥┼╒,PAGE┴LLOC╔NTERNAL,0,0,0,PAGE┴LLOC╥╠╥┼╒,PAGE┴LLOC╥╠
-
- ACE╨AGE┴LLOC = * ;( .┴=PAGES, .╪=ST╘YPE, .┘=END╘YPE ) : [MP]=FAR╨TR
- PHA
- LDA ACE╨ROCESS╔─
- STA ALLOC╨ROC╔─
- PLA
- KERN╨AGE┴LLOC = *
- STA SEARCH╙IZE
- CMP #0
- BNE +
- JSR PAGE┴LLOC╞AIL
- CLC
- RTS
- + CPX #ACE═EM╥┼╒
- BCS +
- LDX #ACE═EM╥┼╒
- + CPY #ACE═EM╥╠
- BEQ +
- BCC +
- LDY #ACE═EM╥╠
- + STX SEARCH╘YPE╙TART
- STY SEARCH╘YPE╙TOP
- - LDA SEARCH╘YPE╙TART
- CMP SEARCH╘YPE╙TOP
- BEQ +
- BCS PAGE┴LLOC╞AIL
- + LDX SEARCH╘YPE╙TART
- LDA SEARCH═IN╞AIL,X
- BEQ +
- CMP SEARCH╙IZE
- BEQ PAGE┴LLOC╬EXT
- BCC PAGE┴LLOC╬EXT
- + LDA SEARCH╘YPE╙TART
- ASL
- TAX
- LDA SEARCH╘YPE╩MP+0,X
- STA MP+0
- LDA SEARCH╘YPE╩MP+1,X
- BEQ PAGE┴LLOC╬EXT
- STA MP+1
- JSR PAGE┴LLOC─ISPATCH
- BCC ++
- LDX SEARCH╘YPE╙TART
- LDA SEARCH═IN╞AIL,X
- BEQ +
- CMP SEARCH╙IZE
- BCC PAGE┴LLOC╬EXT
- + LDA SEARCH╙IZE
- STA SEARCH═IN╞AIL,X
-
- PAGE┴LLOC╬EXT = *
- INC SEARCH╘YPE╙TART
- JMP -
- + LDX MP+3
- LDA MP+2
- CMP MIN╒SED┬ANK,X
- BCS +
- STA MIN╒SED┬ANK,X
- + CMP MAX╒SED┬ANK,X
- BCC +
- STA MAX╒SED┬ANK,X
- + CLC
- RTS
-
- PAGE┴LLOC─ISPATCH = *
- JMP (MP)
-
- PAGE┴LLOC╞AIL = *
- LDA #ACE┼RR╔NSUFFICIENT═EMORY
- STA ERRNO
- LDA #$00
- STA MP+0
- STA MP+1
- STA MP+2
- STA MP+3
- SEC
- RTS
-
- PAGE┴LLOC╥┼╒ = * ;( ) : .╪=PAGE, FREEMAP┬ANK, .├├=OK
- LDA #ACE═EM╥┼╒
- STA MP+3
- LDA ACE╥EU├UR
- LDX ACE╥EU╙TART
- LDY ACE╥EU┬ANKS
- JSR SEARCH╘YPE
- STA ACE╥EU├UR
- RTS
-
- PAGE┴LLOC╔NTERNAL = *
- LDA #ACE═EM╔NTERNAL
- STA MP+3
- LDA ACE╔NTERNAL├UR
- LDX #$00
- LDY ACE╔NTERNAL┬ANKS
- JSR SEARCH╘YPE
- STA ACE╔NTERNAL├UR
- RTS
-
- PAGE┴LLOC╥╠╥┼╒ = *
- LDA #ACE═EM╥╠╥┼╒
- STA MP+3
- LDA ACE╥AMLINK╥EU├UR
- LDX ACE╥EU╙TART
- LDY ACE╥AMLINK╥EU┬ANKS
- JSR SEARCH╘YPE
- STA ACE╥AMLINK╥EU├UR
- RTS
-
- PAGE┴LLOC╥╠ = *
- LDA #ACE═EM╥╠
- STA MP+3
- LDA ACE╥AMLINK├UR
- LDX #$00
- LDY ACE╥AMLINK┬ANKS
- JSR SEARCH╘YPE
- STA ACE╥AMLINK├UR
- RTS
-
- SEARCH├URRENT .BUF 1
- SEARCH╙TART .BUF 1
- SEARCH╙TOP .BUF 1
-
- SEARCH╘YPE = * ;( MP+3=TYPE, .┴=CURRENT, .╪=START, .┘=STOP ):[MP],.├├,.┴=CUR,.╪
- STA SEARCH├URRENT
- STA MP+2
- STX SEARCH╙TART
- STY SEARCH╙TOP
- CPX SEARCH╙TOP
- BCC +
- RTS
- / LDA MP+2
- LDY MP+3
- JSR GET╞REEMAP
- LDY SEARCH╙IZE
- JSR SEARCH╞REEMAP
- BCS +
- LDA #0
- STA MP+0
- STX MP+1
- LDA MP+2
- CLC
- RTS
- + INC MP+2
- LDA MP+2
- CMP SEARCH╙TOP
- BCC +
- LDA SEARCH╙TART
- STA MP+2
- + LDA MP+2
- CMP SEARCH├URRENT
- BNE -
- SEC
- RTS
-
- SEARCH╨AGES .BUF 1
- NEWMAX .BUF 1
-
- SEARCH╞REEMAP = * ;( .┘=PAGES ) : .├├=FOUND, .╪=FIRST╨G
- ;** FIRST FREE
- LDX FREEMAP╨AGE
- LDA FREEMAP,X
- BEQ +
- - INX
- BEQ FREEMAP╞ULL
- LDA FREEMAP,X
- BNE -
- STX FREEMAP╨AGE
- JMP +
- FREEMAP╞ULL = *
- SEC
- RTS
-
- ;** SEARCH
- + STY SEARCH╨AGES
- CPX #0
- BEQ +
- DEX
- - LDY SEARCH╨AGES
- - INX
- BEQ FREEMAP╞ULL
- + LDA FREEMAP,X
- BNE --
- DEY
- BNE -
-
- ;** ALLOCATE
- STX NEWMAX
- LDY SEARCH╨AGES
- LDA ALLOC╨ROC╔─
- - STA FREEMAP,X
- DEX
- DEY
- BNE -
- INX
- CPX FREEMAP╨AGE
- BNE +
- LDY NEWMAX
- INY
- STY FREEMAP╨AGE
- + LDA #$FF
- STA FREEMAP─IRTY
- SEC
- LDA ACE╞REE═EMORY+1
- SBC SEARCH╨AGES
- STA ACE╞REE═EMORY+1
- LDA ACE╞REE═EMORY+2
- SBC #0
- STA ACE╞REE═EMORY+2
- BCS +
- DEC ACE╞REE═EMORY+3
- + CLC
- RTS
-
- FREE╨AGE .BUF 1
- FREE╠EN .BUF 1
-
- ACE╨AGE╞REE = * ;( [MP]=╞AR╨TR, .┴=PAGES )
- LDX ACE╨ROCESS╔─
- STX ALLOC╨ROC╔─
- KERN╨AGE╞REE = *
- STA FREE╠EN
- CMP #0
- BNE +
- JMP PAGE╞REE┼XIT
- + LDA MP+3
- CMP #ACE═EM╬ULL
- BNE +
- LDA #ACE┼RR╬ULL╨OINTER
- JMP PAGE╞REE╞AIL
- + LDA #ACE┼RR╔NVALID╞REE╨ARMS
- LDX MP+0
- BNE PAGE╞REE╞AIL
- LDA MP+1
- STA FREE╨AGE
- CLC
- ADC FREE╠EN
- BCC +
- LDA #ACE┼RR╔NVALID╞REE╨ARMS
- JMP PAGE╞REE╞AIL
- + LDA MP+2
- LDY MP+3
- JSR GET╞REEMAP
- LDA ALLOC╨ROC╔─
- LDX FREE╨AGE
- LDY FREE╠EN
- - CMP FREEMAP,X
- BEQ +
- LDA #ACE┼RR╞REE╬OT╧WNED
- JMP PAGE╞REE╞AIL
- + INX
- DEY
- BNE -
- LDX FREE╨AGE
- LDY FREE╠EN
- LDA #$00
- - STA FREEMAP,X
- INX
- DEY
- BNE -
- LDA #$FF
- STA FREEMAP─IRTY
- LDA FREE╨AGE
- CMP FREEMAP╨AGE
- BCS +
- STA FREEMAP╨AGE
- ;** ASSUME 2*(MIN-1)+LEN+1 NEW MIN
- + LDX MP+3
- LDA SEARCH═IN╞AIL,X
- BEQ ++
- SEC
- SBC #1
- ASL
- BCS +
- SEC
- ADC FREE╠EN
- BCC ++
- + LDA #0
- + STA SEARCH═IN╞AIL,X
-
- CLC
- LDA ACE╞REE═EMORY+1
- ADC FREE╠EN
- STA ACE╞REE═EMORY+1
- BCC PAGE╞REE┼XIT
- INC ACE╞REE═EMORY+2
- BNE PAGE╞REE┼XIT
- INC ACE╞REE═EMORY+3
-
- PAGE╞REE┼XIT = *
- CLC
- RTS
-
- PAGE╞REE╞AIL = *
- STA ERRNO
- SEC
- RTS
-
- RECLAIM═EM╘YPE .BUF 1
-
- RECLAIM╨ROC═EMORY = *
- LDX #0
- - LDA MIN╒SED┬ANK,X
- CMP MAX╒SED┬ANK,X
- BEQ +
- BCS ++
- + STX RECLAIM═EM╘YPE
- LDA MIN╒SED┬ANK,X
- LDY MAX╒SED┬ANK,X
- TAX
- LDA RECLAIM═EM╘YPE
- JSR RECLAIM╨ROC╘YPE
- LDX RECLAIM═EM╘YPE
- + INX
- CPX #ACE═EM╘YPES
- BCC -
- RTS
-
- RP┬ANK .BUF 2
- RP┼ND .BUF 1
-
- RECLAIM╨ROC╘YPE = * ;( .┴=TYPE, .╪=START┬ANK, .┘=END┬ANK )
- STX RP┬ANK+0
- STA RP┬ANK+1
- STY RP┼ND
- - LDA RP┬ANK+0
- LDY RP┬ANK+1
- CMP RP┼ND
- BEQ +
- BCS ++
- + JSR GET╞REEMAP
- JSR RECLAIM╨ROC╞REEMAP
- INC RP┬ANK+0
- BNE -
- + RTS
-
- RECLAIM╨ROC╞REEMAP = * ;( ) : .┘=PAGES╥EMOVED
- LDY #0
- LDX #0
- LDA ACE╨ROCESS╔─
- JMP +
- - INX
- BEQ ++
- + CMP FREEMAP,X
- BNE -
- LDA #0
- STA FREEMAP,X
- INY
- LDA ACE╨ROCESS╔─
- JMP -
- + CPY #0
- BEQ +
- LDA #0
- STA FREEMAP╨AGE
- LDX FREEMAP┬ANK+1
- STA SEARCH═IN╞AIL,X
- LDA #$FF
- STA FREEMAP─IRTY
- TYA
- CLC
- ADC ACE╞REE═EMORY+1
- STA ACE╞REE═EMORY+1
- BCC +
- INC ACE╞REE═EMORY+2
- BNE +
- INC ACE╞REE═EMORY+3
- + CLC
- RTS
-
- MIN╒SED┬ANK .BUF ACE═EM╘YPES
- MAX╒SED┬ANK .BUF ACE═EM╘YPES ;PLUS 1
-
- CLEAR═EMORY╔NFO = *
- LDX #ACE═EM╘YPES-1
- - LDA #$FF
- STA MIN╒SED┬ANK,X
- LDA #$00
- STA MAX╒SED┬ANK,X
- DEX
- BPL -
- RTS
-
- ;*** PROCESS PRIMITIVES
-
- RECLAIM╙AVE .BUF 1
-
- RECLAIM╧PEN╞ILES = *
- JSR KERNEL├LRCHN
- LDX #0
- - LDA LFTABLE,X
- CMP #LFNULL
- BEQ +
- LDA PIDTABLE,X
- CMP ACE╨ROCESS╔─
- BNE +
- STX RECLAIM╙AVE
- TXA
- JSR CLOSE
- LDX RECLAIM╙AVE
- + INX
- CPX #FCB├OUNT
- BCC -
- RTS
-
- ACE═EM╙TAT = *
- LDY #0
- - LDA ACE╞REE═EMORY,Y
- STA 0,X
- LDA ACE╘OTAL═EMORY,Y
- STA 4,X
- INX
- INY
- CPY #4
- BCC -
- LDA ACE╨ROCESS╔─
- CLC
- RTS
-
- EXEC┴RGC .BUF 2
- EXEC╞RAME .BUF 44+4
- EXEC╙TACK╬EED .BUF 1
- EXEC┴DDR .BUF 2
- EXEC╫ORK .BUF 2
-
- ACE┼XEC = *
- STA EXEC┴RGC+0
- STY EXEC┴RGC+1
- ;** LOAD EXECUTABLE
- LDA #<ACE┴PP┴DDRESS
- LDY #>ACE┴PP┴DDRESS
- BRK
- JMP EXEC├OMMON
-
- ACE┼XEC╙UB = *
- STA EXEC┴RGC+0
- STY EXEC┴RGC+1
- LDA #0
- STA STRING┬UFFER+0
- LDA #10
- STA EXEC╙TACK╬EED
- LDA ZP+0
- LDY ZP+1
-
- EXEC├OMMON = *
- STA EXEC┴DDR+0
- STY EXEC┴DDR+1
- ;** PUT IN FILENAME
- LDX #$FF
- - INX
- LDA STRING┬UFFER,X
- BNE -
- INX
- STX SYSWORK+0
- SEC
- LDA ZW+0
- SBC SYSWORK+0
- STA SYSWORK+0
- LDA ZW+1
- SBC #0
- STA SYSWORK+1
- LDY #0
- - LDA STRING┬UFFER,Y
- STA (SYSWORK),Y
- BEQ +
- INY
- BNE -
-
- ;** SET UP NEW FRAME INFO
- + LDX #1
- - LDA ACE╞RAME╨TR,X
- STA EXEC╞RAME+0,X
- LDA ACE┴RGC,X
- STA EXEC╞RAME+2,X
- LDA ACE┴RGV,X
- STA EXEC╞RAME+4,X
- DEX
- BPL -
- LDX #3
- - LDA MP,X
- STA EXEC╞RAME+14,X
- LDA #0
- STA EXEC╞RAME+18,X
- LDA #ACE═EM╬ULL
- STA EXEC╞RAME+24,X
- DEX
- BPL -
- TSX
- STX EXEC╞RAME+22
- LDA #$00
- STA EXEC╞RAME+23
- LDX #7
- - LDA MIN╒SED┬ANK,X
- STA EXEC╞RAME+28,X
- LDA MAX╒SED┬ANK,X
- STA EXEC╞RAME+36,X
- DEX
- BPL -
-
- ;** STORE NEW FRAME INFO
- LDA ZW+1
- SBC #0
- STA SYSWORK+1
- SEC
- LDA SYSWORK+0
- SBC #44
- STA SYSWORK+0
- BCS +
- DEC SYSWORK+1
- + LDY #43
- - LDA EXEC╞RAME,Y
- STA (SYSWORK),Y
- DEY
- BPL -
-
- ;** SET UP GLOBALS FOR NEW PROCESS
- LDX #1
- - LDA SYSWORK+0,X
- STA ACE╞RAME╨TR,X
- STA ACE═EM╘OP,X
- LDA EXEC┴RGC,X
- STA ACE┴RGC,X
- LDA ZW,X
- STA ACE┴RGV,X
- DEX
- BPL -
- JSR CLEAR═EMORY╔NFO
-
- ;** CALL THE NEW PROGRAM
- INC ACE╨ROCESS╔─
- LDA EXEC┴DDR+0
- LDY EXEC┴DDR+1
- STA ZP+0
- STY ZP+1
- LDA #0
- TAX
- TAY
- PHA
- PLP
- JSR ACE┼NTER
- LDA #0
- LDX #0
- JMP ACE┼XIT
-
- ACE┼NTER = *
- JMP (ZP)
-
- EXIT├ODE╙AVE .BUF 2
- EXIT┴RGC .BUF 2
- EXIT┴RGV .BUF 2
-
- ACE┼XIT = *
- STA EXIT├ODE╙AVE+0
- STX EXIT├ODE╙AVE+1
- LDA ACE╞RAME╨TR+0
- LDY ACE╞RAME╨TR+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDY #43
- - LDA (SYSWORK),Y
- STA EXEC╞RAME,Y
- DEY
- BPL -
- LDX EXEC╞RAME+22
- TXS
- LDX #1
- - LDA ACE┴RGC,X
- STA EXIT┴RGC,X
- LDA ACE┴RGV,X
- STA EXIT┴RGV,X
- LDA EXEC╞RAME+2,X
- STA ACE┴RGC,X
- LDA EXEC╞RAME+4,X
- STA ACE┴RGV,X
- LDA EXEC╞RAME+0,X
- STA ACE═EM╘OP,X
- STA ACE╞RAME╨TR,X
- DEX
- BPL -
-
- JSR RECLAIM╧PEN╞ILES
- JSR RECLAIM╨ROC═EMORY
- DEC ACE╨ROCESS╔─
- LDX #7
- - LDA EXEC╞RAME+28,X
- STA MIN╒SED┬ANK,X
- LDA EXEC╞RAME+36,X
- STA MAX╒SED┬ANK,X
- DEX
- BPL -
- ;** RELOAD PREVIOUS PROGRAM IF NECESSARY
- LDA ACE╞RAME╨TR+0
- LDY ACE╞RAME╨TR+1
- STA SYSWORK+2
- STY SYSWORK+3
- LDA SYSWORK+3
- CMP ACE╙TACK╘OP+1
- BCS +
- LDY #44
- LDA (SYSWORK+2),Y
- BEQ +
- LDA ACE╨ROCESS╔─
- BRK
- ;JSR RELOAD_PREVIOUS_PROGRAM
-
- ;** PREPARE EXIT PARAMETERS
- + LDX #3
- - LDA EXEC╞RAME+14,X
- STA MP,X
- DEX
- BPL -
- LDX #1
- - LDA EXIT┴RGC,X
- STA ZP,X
- LDA EXIT┴RGV,X
- STA ZW,X
- DEX
- BPL -
- LDA EXIT├ODE╙AVE+0
- LDX EXIT├ODE╙AVE+1
- LDY #0
- CLC
- RTS
-
- ;BLANK LINE AT END
-
-