home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / ACE-R11-SCR1.ARC / ACEMEM.S < prev    next >
Encoding:
Text File  |  2019-04-13  |  17.3 KB  |  1,205 lines

  1. ;┴├┼-128/64 KERNEL ─YNAMIC ═EMORY & ╨ROCESS ROUTINES, BY ├RAIG ┬RUCE.
  2.  
  3. ;*** MEMORY ROUTINES ***
  4.  
  5. .IF COMPUTER-64
  6.    COM├ODE┬UFFER = $200
  7. .IFE
  8. TEMP1 = $8F
  9.  
  10. BK╙ELECT╥AM0 = $FF01
  11. REU = $DF00
  12. RL = $DE00
  13. RL╥EGS = $E0A9
  14. RL┼XEC = $FE1E
  15.  
  16. ;***STARTUP
  17.  
  18. INIT═EMORY = *
  19. .IF COMPUTER-64
  20.    LDX #0
  21. -  LDA COM├ODE╙TART,X
  22.    STA COM├ODE┬UFFER,X
  23.    INX
  24.    CPX #COM├ODE┼ND-COM├ODE╙TART
  25.    BCC -
  26. .IFE
  27.    RTS
  28.  
  29. SHUTDOWN═EMORY = *
  30. .IF COMPUTER-64
  31.    LDX #0
  32.    LDA #0
  33. -  STA COM├ODE┬UFFER,X
  34.    INX
  35.    CPX #COM├ODE┼ND-COM├ODE╙TART
  36.    BNE -
  37. .IFE
  38.    RTS
  39.  
  40. INTERN┬ANK├ONFIGS = *
  41. .IF COMPUTER-64
  42.    .BYTE $3F,$7F,$BF,$FF,$BF,$FF,$BF,$FF,$3F
  43. .ELSE
  44.    .BYTE $70,$70
  45. .IFE
  46.  
  47. INTERN┬ANK╟ROUPS = *
  48. .IF COMPUTER-64
  49.    .BYTE $04,$04,$04,$04,$14,$14,$24,$24,$04
  50. .IFE
  51.  
  52. ;***COMMON CODE
  53.  
  54. COM├ODE╙TART = *
  55. .IF COMPUTER-64
  56. .ELSE
  57.    COM├ODE┬UFFER = COM├ODE╙TART
  58. .IFE
  59.  
  60. COM┌P╠OAD = *
  61.    STY TEMP1
  62.    LDY MP+2
  63. .IF COMPUTER-64
  64.    LDA INTERN┬ANK╟ROUPS,Y
  65.    STA $D506
  66. .IFE
  67.    LDA INTERN┬ANK├ONFIGS,Y
  68.    STA BK╙ELECT
  69.    LDY #0
  70. -  LDA (MP),Y
  71.    STA 0,X
  72.    INX
  73.    INY
  74.    CPY TEMP1
  75.    BCC -
  76.    LDA #BK┴├┼
  77.    STA BK╙ELECT
  78.    CLC
  79.    RTS
  80.  
  81. COM┌P╙TORE = *
  82.    STY TEMP1
  83.    LDY MP+2
  84. .IF COMPUTER-64
  85.    LDA INTERN┬ANK╟ROUPS,Y
  86.    STA $D506
  87. .IFE
  88.    LDA INTERN┬ANK├ONFIGS,Y
  89.    STA BK╙ELECT
  90.    LDY #0
  91. -  LDA 0,X
  92.    STA (MP),Y
  93.    INX
  94.    INY
  95.    CPY TEMP1
  96.    BCC -
  97.    LDA #BK┴├┼
  98.    STA BK╙ELECT
  99.    CLC
  100.    RTS
  101.  
  102. COM├OPY╘O╥AM0 = *
  103.    LDX MP+2
  104. .IF COMPUTER-64
  105.    LDA INTERN┬ANK╟ROUPS,X
  106.    STA $D506
  107.    LDA INTERN┬ANK├ONFIGS,X
  108.    TAX
  109. .ELSE
  110.    LDA INTERN┬ANK├ONFIGS,X
  111.    STA BK╙ELECT
  112. .IFE
  113.    DEY
  114.    BEQ +
  115. .IF COMPUTER-64
  116. -  STX BK╙ELECT
  117.    LDA (MP),Y
  118.    STA BK╙ELECT╥AM0
  119. .ELSE
  120. -  LDA (MP),Y
  121. .IFE
  122.    STA (ZP),Y
  123.    DEY
  124.    BNE -
  125. .IF COMPUTER-64
  126. +  STX BK╙ELECT
  127.    LDA (MP),Y
  128.    STA BK╙ELECT╥AM0
  129. .ELSE
  130. +  LDA (MP),Y
  131. .IFE
  132.    STA (ZP),Y
  133.    LDA #BK┴├┼
  134.    STA BK╙ELECT
  135.    CLC
  136.    RTS
  137.  
  138. COM├OPY╞ROM╥AM0 = *
  139.    LDX MP+2
  140. .IF COMPUTER-64
  141.    LDA INTERN┬ANK╟ROUPS,X
  142.    STA $D506
  143.    LDA INTERN┬ANK├ONFIGS,X
  144.    TAX
  145. .ELSE
  146.    LDA INTERN┬ANK├ONFIGS,X
  147.    STA BK╙ELECT
  148. .IFE
  149.    DEY
  150.    BEQ +
  151. .IF COMPUTER-64
  152. -  STA BK╙ELECT╥AM0
  153.    LDA (ZP),Y
  154.    STX BK╙ELECT
  155. .ELSE
  156. -  LDA (ZP),Y
  157. .IFE
  158.    STA (MP),Y
  159.    DEY
  160.    BNE -
  161. .IF COMPUTER-64
  162. +  STA BK╙ELECT╥AM0
  163.    LDA (ZP),Y
  164.    STX BK╙ELECT
  165. .ELSE
  166. +  LDA (ZP),Y
  167. .IFE
  168.    STA (MP),Y
  169.    LDA #BK┴├┼
  170.    STA BK╙ELECT
  171.    CLC
  172.    RTS
  173. COM├ODE┼ND = *
  174.  
  175. ;*** ZPLOAD( [MP]=╙OURCE, .╪=┌P─EST, .┘=╠ENGTH ) : .├╙=ERR
  176.  
  177. ACE┌P╠OAD = *
  178.    LDA MP+3
  179.    BEQ NULL╨TR┼RROR
  180.    CMP #$02
  181.    BCC +
  182.    BNE ZP╠OAD╥╠
  183.    JMP COM┌P╠OAD-COM├ODE╙TART+COM├ODE┬UFFER
  184. +  STY REU+7
  185.    LDY #$91
  186.  
  187. ZERO╨AGE╥EU╧P = *
  188.    LDA MP+2
  189.    STA REU+6
  190.    STX REU+2
  191.    LDA #0
  192.    STA REU+3
  193.    STA REU+8
  194.    LDA MP+0
  195.    STA REU+4
  196.    LDA MP+1
  197.    STA REU+5
  198. .IF COMPUTER-64
  199.    LDA VIC+$30
  200.    LDX #$00
  201.    STX VIC+$30
  202. .IFE
  203.    STY REU+1
  204. .IF COMPUTER-64
  205.    STA VIC+$30
  206. .IFE
  207.    CLC
  208.    RTS
  209.  
  210. NULL╨TR┼RROR = *
  211.    LDA #ACE┼RR╬ULL╨OINTER
  212.    STA ERRNO
  213.    SEC
  214.    RTS
  215.  
  216. ZP╠OAD╥╠ = *
  217.    LDA #$91
  218. ZERO╨AGE╥L╧P = *  ;( .┴=OPCODE, .╪=ZPADDR, .┘=LEN, [MP]=FAR╨TR )
  219.    STA RAMLINK╧PCODE
  220.    LDA #0
  221.    STY RAMLINK╠ENGTH
  222.    STA RAMLINK╠ENGTH+1
  223.    STX RAMLINK╬EAR╨TR
  224.    STA RAMLINK╬EAR╨TR+1
  225.    JMP RAMLINK╧P
  226.  
  227. RAMLINK╧PCODE .BUF 1
  228. RAMLINK╠ENGTH .BUF 2
  229. RAMLINK╬EAR╨TR .BUF 2
  230.  
  231. RAMLINK╧P = *  ;( [MP]=FAR╨TR, RAMLINK╬EAR╨TR, RAMLINK╠ENGTH, RAMLINK╧PCODE )
  232.    JSR RL╥EGS
  233.    LDA RAMLINK╧PCODE
  234.    STA RL+1
  235.    LDA RAMLINK╬EAR╨TR
  236.    LDY RAMLINK╬EAR╨TR+1
  237.    STA RL+2
  238.    STY RL+3
  239.    LDX #0
  240.    LDA MP+3
  241.    CMP #ACE═EM╥╠
  242.    BEQ +
  243.    LDX #4
  244. +  LDA MP+0
  245.    STA RL+4
  246.    CLC
  247.    LDA ACE╥AMLINK╙TART,X
  248.    ADC MP+1
  249.    STA RL+5
  250.    LDA ACE╥AMLINK╙TART+1,X
  251.    ADC MP+2
  252.    STA RL+6
  253.    LDA RAMLINK╠ENGTH
  254.    LDY RAMLINK╠ENGTH+1
  255.    STA RL+7
  256.    STY RL+8
  257.    LDA #0
  258.    STA RL+10
  259.    STA RL+16
  260.    JSR RL┼XEC
  261.    CLC
  262.    RTS
  263.  
  264. ;*** ZPSTORE( .╪=┌P╙OURCE, [MP]=─EST, .┘=╠ENGTH ) : .├╙=ERR
  265.  
  266. ACE┌P╙TORE = *
  267.    LDA MP+3
  268.    BEQ NULL╨TR┼RROR
  269.    CMP #$02
  270.    BCC +
  271.    BNE ZP╙TORE╥╠
  272.    JMP COM┌P╙TORE-COM├ODE╙TART+COM├ODE┬UFFER
  273. +  STY REU+7
  274.    LDY #$90
  275.    JMP ZERO╨AGE╥EU╧P
  276.  
  277. ZP╙TORE╥╠ = *
  278.    LDA #$90
  279.    JMP ZERO╨AGE╥L╧P
  280.  
  281. ;*** FETCH( [MP]=╞AR╙OURCE, (ZP)=╥AM0─EST, .┴┘=╠ENGTH )
  282.  
  283. FETCH╠ENGTH     .BUF 2
  284. FETCH╙AVE╙OURCE .BUF 1
  285. FETCH╙AVE─EST   .BUF 1
  286.  
  287. ACE╞ETCH = *
  288.    LDX MP+3
  289.    BEQ FETCH╬ULL╨TR┼RROR
  290.    CPX #ACE═EM╔NTERNAL
  291.    BCS +
  292.    LDX #$91
  293.    JMP DO╥EU
  294. +  BNE FETCH╥╠
  295.    CPY #0
  296.    BNE FETCH╠ONG
  297.    TAY
  298.    BNE FETCH╨AGE
  299.    CLC
  300.    RTS
  301.  
  302.    FETCH╬ULL╨TR┼RROR = *
  303.    JMP NULL╨TR┼RROR
  304.  
  305.    FETCH╨AGE = *  ;( [MP]=FROM, (ZP)=TO, .┘=LEN(0=256) )
  306.    LDX MP+2
  307.    CPX #0
  308.    BEQ +
  309.    ;XX DON'T HAVE TO WORRY ABOUT THE 64 HAVING MORE THAN ONE BANK YET
  310.    JMP COM├OPY╘O╥AM0-COM├ODE╙TART+COM├ODE┬UFFER
  311. .IF COMPUTER-64
  312. +  STX BK╙ELECT╥AM0
  313. .ELSE
  314. +  LDX #BK╥AM0
  315.    STX BK╙ELECT
  316. .IFE
  317.    DEY
  318.    BEQ +
  319. -  LDA (MP),Y
  320.    STA (ZP),Y
  321.    DEY
  322.    BNE -
  323. +  LDA (MP),Y
  324.    STA (ZP),Y
  325.    LDA #BK┴├┼
  326.    STA BK╙ELECT
  327.    CLC
  328.    RTS
  329.  
  330.    FETCH╠ONG = *
  331.    STA FETCH╠ENGTH
  332.    STY FETCH╠ENGTH+1
  333.    LDA MP+1
  334.    STA FETCH╙AVE╙OURCE
  335.    LDA ZP+1
  336.    STA FETCH╙AVE─EST
  337.    LDA FETCH╠ENGTH+1
  338.    BEQ FETCH╠ONG┼XIT
  339. -  LDY #0
  340.    JSR FETCH╨AGE
  341.    INC MP+1
  342.    INC ZP+1
  343.    DEC FETCH╠ENGTH+1
  344.    BNE -
  345.  
  346.    FETCH╠ONG┼XIT = *
  347.    LDY FETCH╠ENGTH
  348.    BEQ +
  349.    JSR FETCH╨AGE
  350. +  LDA FETCH╙AVE╙OURCE
  351.    STA MP+1
  352.    LDA FETCH╙AVE─EST
  353.    STA ZP+1
  354.    CLC
  355.    RTS
  356.  
  357. FETCH╥╠ = *
  358.    LDX #$91
  359. LARGE╥L╧P = *
  360.    STX RAMLINK╧PCODE
  361.    STA RAMLINK╠ENGTH+0
  362.    STY RAMLINK╠ENGTH+1
  363.    LDA ZP+0
  364.    LDY ZP+1
  365.    STA RAMLINK╬EAR╨TR+0
  366.    STY RAMLINK╬EAR╨TR+1
  367.    JMP RAMLINK╧P
  368.  
  369. ;*** STASH( (ZP)=╥AM0╙OURCE, [MP]=╞AR─EST, .┴┘=LENGTH )
  370.  
  371. STASH╠ENGTH     .BUF 2
  372. STASH╙AVE╙OURCE .BUF 1
  373. STASH╙AVE─EST   .BUF 1
  374.  
  375. ACE╙TASH = *
  376.    LDX MP+3
  377.    BEQ STASH╬ULL╨TR┼RROR
  378.    CPX #ACE═EM╔NTERNAL
  379.    BCS +
  380.    LDX #$90
  381.    JMP DO╥EU
  382. +  BNE STASH╥╠
  383.    CPY #0
  384.    BNE STASH╠ONG
  385.    TAY
  386.    BNE STASH╨AGE
  387.    CLC
  388.    RTS
  389.  
  390.    STASH╬ULL╨TR┼RROR = *
  391.    JMP NULL╨TR┼RROR
  392.  
  393.    STASH╨AGE = *
  394.    LDX MP+2
  395.    CPX #0
  396.    BEQ +
  397.    ;XX DON'T HAVE TO WORRY ABOUT THE 64 HAVING MORE THAN ONE BANK YET
  398.    JMP COM├OPY╞ROM╥AM0-COM├ODE╙TART+COM├ODE┬UFFER
  399. .IF COMPUTER-64
  400. +  STX BK╙ELECT╥AM0
  401. .ELSE
  402. +  LDX #BK╥AM0
  403.    STX BK╙ELECT
  404. .IFE
  405.    DEY
  406.    BEQ +
  407. -  LDA (ZP),Y
  408.    STA (MP),Y
  409.    DEY
  410.    BNE -
  411. +  LDA (ZP),Y
  412.    STA (MP),Y
  413.    LDA #BK┴├┼
  414.    STA BK╙ELECT
  415.    CLC
  416.    RTS
  417.  
  418.    STASH╠ONG = *
  419.    STA STASH╠ENGTH
  420.    STY STASH╠ENGTH+1
  421.    LDA ZP+1
  422.    STA STASH╙AVE╙OURCE
  423.    LDA MP+1
  424.    STA STASH╙AVE─EST
  425.    LDA STASH╠ENGTH+1
  426.    BEQ STASH╠ONG┼XIT
  427. -  LDY #0
  428.    JSR STASH╨AGE
  429.    INC MP+1
  430.    INC ZP+1
  431.    DEC STASH╠ENGTH+1
  432.    BNE -
  433.  
  434.    STASH╠ONG┼XIT = *
  435.    LDY STASH╠ENGTH
  436.    BEQ +
  437.    LDX MP+2
  438.    JSR STASH╨AGE
  439. +  LDA STASH╙AVE╙OURCE
  440.    STA ZP+1
  441.    LDA STASH╙AVE─EST
  442.    STA MP+1
  443.    CLC
  444.    RTS
  445.  
  446. STASH╥╠ = *
  447.    LDX #$90
  448.    JMP LARGE╥L╧P
  449.  
  450. ;*** RAM0 LOAD/STORE(.╪) EXPANSION MEMORY [MP] <- -> (ZP) FOR .┴┘ BYTES
  451.  
  452. DO╥EU = *
  453.    STA REU+7
  454.    STY REU+8
  455.    LDA ZP+0
  456.    LDY ZP+1
  457.    STA REU+2
  458.    STY REU+3
  459.    LDA MP+0
  460.    LDY MP+1
  461.    STA REU+4
  462.    STY REU+5
  463.    LDA MP+2
  464.    STA REU+6
  465.    LDY VIC+$30
  466.    LDA #0
  467.    STA VIC+$30
  468.    STX REU+1
  469.    STY VIC+$30
  470.    CLC
  471.    RTS
  472.  
  473. ;*** MEMORY ALLOCATION ROUTINES
  474.  
  475. FREEMAP┬ANK     .BUF 2
  476. FREEMAP─IRTY    .BUF 1
  477. FREEMAP╨AGE     .BUF 1
  478. SEARCH═IN╞AIL   .BUF 8
  479.  
  480. INIT═EMORY┴LLOC = *
  481.    LDX #0
  482.    LDY #0
  483.    STX FREEMAP╨AGE
  484.    STX FREEMAP─IRTY
  485. -  LDA RAM0╞REE═AP,X
  486.    STA FREEMAP,X
  487.    BNE +
  488.    INY
  489. +  INX
  490.    BNE -
  491.    LDA #0
  492.    LDY #ACE═EM╔NTERNAL
  493.    STA FREEMAP┬ANK+0
  494.    STY FREEMAP┬ANK+1
  495.    LDA #$00
  496.    LDX #0
  497. -  STA SEARCH═IN╞AIL,X
  498.    INX
  499.    CPX #8
  500.    BCC -
  501.    CLC
  502.    RTS
  503.  
  504. FREEMAP┬ANK╙AVE .BUF 2
  505.  
  506. GET╞REEMAP = *  ;( .┴┘=BANK )
  507.    CMP FREEMAP┬ANK+0
  508.    BNE +
  509.    CPY FREEMAP┬ANK+1
  510.    BNE +
  511.    RTS
  512.  
  513.    ;** SAVE OLD FREEMAP
  514. +  STA FREEMAP┬ANK╙AVE+0
  515.    STY FREEMAP┬ANK╙AVE+1
  516.    LDA FREEMAP─IRTY
  517.    BEQ +
  518.    LDA FREEMAP┬ANK+0
  519.    LDY FREEMAP┬ANK+1
  520.    JSR LOCATE┬ANK╞REEMAP
  521.    JSR SET┌P╞REEMAP
  522.    JSR STASH
  523.  
  524.    ;** LOAD NEW FREEMAP
  525. +  LDA FREEMAP┬ANK╙AVE+0
  526.    LDY FREEMAP┬ANK╙AVE+1
  527.    STA FREEMAP┬ANK+0
  528.    STY FREEMAP┬ANK+1
  529.    JSR LOCATE┬ANK╞REEMAP
  530.    JSR SET┌P╞REEMAP
  531.    JSR FETCH
  532.    LDA #0
  533.    STA FREEMAP─IRTY
  534.    STA FREEMAP╨AGE
  535.    RTS
  536.  
  537.    SET┌P╞REEMAP = *  ;() : (ZP)=#FREEMAP, .┴┘=#256
  538.    LDA #<FREEMAP
  539.    LDY #>FREEMAP
  540.    STA ZP+0
  541.    STY ZP+1
  542.    LDA #<256
  543.    LDY #>256
  544.    RTS
  545.  
  546. LOCATE┬ANK╞REEMAP = *  ;( .┴┘=BANK ) : [MP]
  547.    STA MP+2
  548.    STY MP+3
  549.    LDA #<$FF00
  550.    LDX #>$FF00
  551.    STA MP+0
  552.    STX MP+1
  553.    CPY #ACE═EM╔NTERNAL
  554.    BEQ +
  555.    RTS
  556. +  LDA MP+2
  557.    BNE +
  558.    ;** RAM0
  559.    LDA ACE╥AM0╞REEMAP+0
  560.    LDY ACE╥AM0╞REEMAP+1
  561. -  STA MP+0
  562.    STY MP+1
  563.    RTS
  564. +  CMP #1
  565.    BNE +
  566.    ;** RAM1
  567.    LDA #0
  568.    LDY ACE╥AM1╞REEMAP
  569.    JMP -
  570.    ;** EXP.INT.RAM
  571. +  LDA #<$0400
  572.    LDY #>$0400
  573.    JMP -
  574.  
  575. SEARCH╘YPE╙TART .BUF 1
  576. SEARCH╘YPE╙TOP  .BUF 1
  577. SEARCH╙IZE      .BUF 1
  578. ALLOC╨ROC╔─     .BUF 1
  579. SEARCH╘YPE╩MP = *
  580.    .WORD 0,PAGE┴LLOC╥┼╒,PAGE┴LLOC╔NTERNAL,0,0,0,PAGE┴LLOC╥╠╥┼╒,PAGE┴LLOC╥╠
  581.  
  582. ACE╨AGE┴LLOC = *  ;( .┴=PAGES, .╪=ST╘YPE, .┘=END╘YPE ) : [MP]=FAR╨TR
  583.    PHA
  584.    LDA ACE╨ROCESS╔─
  585.    STA ALLOC╨ROC╔─
  586.    PLA
  587. KERN╨AGE┴LLOC = *
  588.    STA SEARCH╙IZE
  589.    CMP #0
  590.    BNE +
  591.    JSR PAGE┴LLOC╞AIL
  592.    CLC
  593.    RTS
  594. +  CPX #ACE═EM╥┼╒
  595.    BCS +
  596.    LDX #ACE═EM╥┼╒
  597. +  CPY #ACE═EM╥╠
  598.    BEQ +
  599.    BCC +
  600.    LDY #ACE═EM╥╠
  601. +  STX SEARCH╘YPE╙TART
  602.    STY SEARCH╘YPE╙TOP
  603. -  LDA SEARCH╘YPE╙TART
  604.    CMP SEARCH╘YPE╙TOP
  605.    BEQ +
  606.    BCS PAGE┴LLOC╞AIL
  607. +  LDX SEARCH╘YPE╙TART
  608.    LDA SEARCH═IN╞AIL,X
  609.    BEQ +
  610.    CMP SEARCH╙IZE
  611.    BEQ PAGE┴LLOC╬EXT
  612.    BCC PAGE┴LLOC╬EXT
  613. +  LDA SEARCH╘YPE╙TART
  614.    ASL
  615.    TAX
  616.    LDA SEARCH╘YPE╩MP+0,X
  617.    STA MP+0
  618.    LDA SEARCH╘YPE╩MP+1,X
  619.    BEQ PAGE┴LLOC╬EXT
  620.    STA MP+1
  621.    JSR PAGE┴LLOC─ISPATCH
  622.    BCC ++
  623.    LDX SEARCH╘YPE╙TART
  624.    LDA SEARCH═IN╞AIL,X
  625.    BEQ +
  626.    CMP SEARCH╙IZE
  627.    BCC PAGE┴LLOC╬EXT
  628. +  LDA SEARCH╙IZE
  629.    STA SEARCH═IN╞AIL,X
  630.  
  631.    PAGE┴LLOC╬EXT = *
  632.    INC SEARCH╘YPE╙TART
  633.    JMP -
  634. +  LDX MP+3
  635.    LDA MP+2
  636.    CMP MIN╒SED┬ANK,X
  637.    BCS +
  638.    STA MIN╒SED┬ANK,X
  639. +  CMP MAX╒SED┬ANK,X
  640.    BCC +
  641.    STA MAX╒SED┬ANK,X
  642. +  CLC
  643.    RTS
  644.  
  645.    PAGE┴LLOC─ISPATCH = *
  646.    JMP (MP)
  647.  
  648.    PAGE┴LLOC╞AIL = *
  649.    LDA #ACE┼RR╔NSUFFICIENT═EMORY
  650.    STA ERRNO
  651.    LDA #$00
  652.    STA MP+0
  653.    STA MP+1
  654.    STA MP+2
  655.    STA MP+3
  656.    SEC
  657.    RTS
  658.  
  659. PAGE┴LLOC╥┼╒ = *  ;( ) : .╪=PAGE, FREEMAP┬ANK, .├├=OK
  660.    LDA #ACE═EM╥┼╒
  661.    STA MP+3
  662.    LDA ACE╥EU├UR
  663.    LDX ACE╥EU╙TART
  664.    LDY ACE╥EU┬ANKS
  665.    JSR SEARCH╘YPE
  666.    STA ACE╥EU├UR
  667.    RTS
  668.  
  669. PAGE┴LLOC╔NTERNAL = *
  670.    LDA #ACE═EM╔NTERNAL
  671.    STA MP+3
  672.    LDA ACE╔NTERNAL├UR
  673.    LDX #$00
  674.    LDY ACE╔NTERNAL┬ANKS
  675.    JSR SEARCH╘YPE
  676.    STA ACE╔NTERNAL├UR
  677.    RTS
  678.  
  679. PAGE┴LLOC╥╠╥┼╒ = *
  680.    LDA #ACE═EM╥╠╥┼╒
  681.    STA MP+3
  682.    LDA ACE╥AMLINK╥EU├UR
  683.    LDX ACE╥EU╙TART
  684.    LDY ACE╥AMLINK╥EU┬ANKS
  685.    JSR SEARCH╘YPE
  686.    STA ACE╥AMLINK╥EU├UR
  687.    RTS
  688.  
  689. PAGE┴LLOC╥╠ = *
  690.    LDA #ACE═EM╥╠
  691.    STA MP+3
  692.    LDA ACE╥AMLINK├UR
  693.    LDX #$00
  694.    LDY ACE╥AMLINK┬ANKS
  695.    JSR SEARCH╘YPE
  696.    STA ACE╥AMLINK├UR
  697.    RTS
  698.  
  699. SEARCH├URRENT .BUF 1
  700. SEARCH╙TART   .BUF 1
  701. SEARCH╙TOP    .BUF 1
  702.  
  703. SEARCH╘YPE = *  ;( MP+3=TYPE, .┴=CURRENT, .╪=START, .┘=STOP ):[MP],.├├,.┴=CUR,.╪
  704.    STA SEARCH├URRENT
  705.    STA MP+2
  706.    STX SEARCH╙TART
  707.    STY SEARCH╙TOP
  708.    CPX SEARCH╙TOP
  709.    BCC +
  710.    RTS
  711. /  LDA MP+2
  712.    LDY MP+3
  713.    JSR GET╞REEMAP
  714.    LDY SEARCH╙IZE
  715.    JSR SEARCH╞REEMAP
  716.    BCS +
  717.    LDA #0
  718.    STA MP+0
  719.    STX MP+1
  720.    LDA MP+2
  721.    CLC
  722.    RTS
  723. +  INC MP+2
  724.    LDA MP+2
  725.    CMP SEARCH╙TOP
  726.    BCC +
  727.    LDA SEARCH╙TART
  728.    STA MP+2
  729. +  LDA MP+2
  730.    CMP SEARCH├URRENT
  731.    BNE -
  732.    SEC
  733.    RTS
  734.  
  735. SEARCH╨AGES .BUF 1
  736. NEWMAX      .BUF 1
  737.  
  738. SEARCH╞REEMAP = *  ;( .┘=PAGES ) : .├├=FOUND, .╪=FIRST╨G
  739.    ;** FIRST FREE
  740.    LDX FREEMAP╨AGE
  741.    LDA FREEMAP,X
  742.    BEQ +
  743. -  INX
  744.    BEQ FREEMAP╞ULL
  745.    LDA FREEMAP,X
  746.    BNE -
  747.    STX FREEMAP╨AGE
  748.    JMP +
  749.    FREEMAP╞ULL = *
  750.    SEC
  751.    RTS
  752.  
  753.    ;** SEARCH
  754. +  STY SEARCH╨AGES
  755.    CPX #0
  756.    BEQ +
  757.    DEX
  758. -  LDY SEARCH╨AGES
  759. -  INX
  760.    BEQ FREEMAP╞ULL
  761. +  LDA FREEMAP,X
  762.    BNE --
  763.    DEY
  764.    BNE -
  765.  
  766.    ;** ALLOCATE
  767.    STX NEWMAX
  768.    LDY SEARCH╨AGES
  769.    LDA ALLOC╨ROC╔─
  770. -  STA FREEMAP,X
  771.    DEX
  772.    DEY
  773.    BNE -
  774.    INX
  775.    CPX FREEMAP╨AGE
  776.    BNE +
  777.    LDY NEWMAX
  778.    INY
  779.    STY FREEMAP╨AGE
  780. +  LDA #$FF
  781.    STA FREEMAP─IRTY
  782.    SEC
  783.    LDA ACE╞REE═EMORY+1
  784.    SBC SEARCH╨AGES
  785.    STA ACE╞REE═EMORY+1
  786.    LDA ACE╞REE═EMORY+2
  787.    SBC #0
  788.    STA ACE╞REE═EMORY+2
  789.    BCS +
  790.    DEC ACE╞REE═EMORY+3
  791. +  CLC
  792.    RTS
  793.  
  794. FREE╨AGE .BUF 1
  795. FREE╠EN  .BUF 1
  796.  
  797. ACE╨AGE╞REE = *  ;( [MP]=╞AR╨TR, .┴=PAGES )
  798.    LDX ACE╨ROCESS╔─
  799.    STX ALLOC╨ROC╔─
  800. KERN╨AGE╞REE = *
  801.    STA FREE╠EN
  802.    CMP #0
  803.    BNE +
  804.    JMP PAGE╞REE┼XIT
  805. +  LDA MP+3
  806.    CMP #ACE═EM╬ULL
  807.    BNE +
  808.    LDA #ACE┼RR╬ULL╨OINTER
  809.    JMP PAGE╞REE╞AIL
  810. +  LDA #ACE┼RR╔NVALID╞REE╨ARMS
  811.    LDX MP+0
  812.    BNE PAGE╞REE╞AIL
  813.    LDA MP+1
  814.    STA FREE╨AGE
  815.    CLC
  816.    ADC FREE╠EN
  817.    BCC +
  818.    LDA #ACE┼RR╔NVALID╞REE╨ARMS
  819.    JMP PAGE╞REE╞AIL
  820. +  LDA MP+2
  821.    LDY MP+3
  822.    JSR GET╞REEMAP
  823.    LDA ALLOC╨ROC╔─
  824.    LDX FREE╨AGE
  825.    LDY FREE╠EN
  826. -  CMP FREEMAP,X
  827.    BEQ +
  828.    LDA #ACE┼RR╞REE╬OT╧WNED
  829.    JMP PAGE╞REE╞AIL
  830. +  INX
  831.    DEY
  832.    BNE -
  833.    LDX FREE╨AGE
  834.    LDY FREE╠EN
  835.    LDA #$00
  836. -  STA FREEMAP,X
  837.    INX
  838.    DEY
  839.    BNE -
  840.    LDA #$FF
  841.    STA FREEMAP─IRTY
  842.    LDA FREE╨AGE
  843.    CMP FREEMAP╨AGE
  844.    BCS +
  845.    STA FREEMAP╨AGE
  846.    ;** ASSUME 2*(MIN-1)+LEN+1 NEW MIN
  847. +  LDX MP+3
  848.    LDA SEARCH═IN╞AIL,X
  849.    BEQ ++
  850.    SEC
  851.    SBC #1
  852.    ASL
  853.    BCS +
  854.    SEC
  855.    ADC FREE╠EN
  856.    BCC ++
  857. +  LDA #0
  858. +  STA SEARCH═IN╞AIL,X
  859.  
  860.    CLC
  861.    LDA ACE╞REE═EMORY+1
  862.    ADC FREE╠EN
  863.    STA ACE╞REE═EMORY+1
  864.    BCC PAGE╞REE┼XIT
  865.    INC ACE╞REE═EMORY+2
  866.    BNE PAGE╞REE┼XIT
  867.    INC ACE╞REE═EMORY+3
  868.  
  869.    PAGE╞REE┼XIT = *
  870.    CLC
  871.    RTS
  872.  
  873.    PAGE╞REE╞AIL = *
  874.    STA ERRNO
  875.    SEC
  876.    RTS
  877.  
  878. RECLAIM═EM╘YPE .BUF 1
  879.  
  880. RECLAIM╨ROC═EMORY = *
  881.    LDX #0
  882. -  LDA MIN╒SED┬ANK,X
  883.    CMP MAX╒SED┬ANK,X
  884.    BEQ +
  885.    BCS ++
  886. +  STX RECLAIM═EM╘YPE
  887.    LDA MIN╒SED┬ANK,X
  888.    LDY MAX╒SED┬ANK,X
  889.    TAX
  890.    LDA RECLAIM═EM╘YPE
  891.    JSR RECLAIM╨ROC╘YPE
  892.    LDX RECLAIM═EM╘YPE
  893. +  INX
  894.    CPX #ACE═EM╘YPES
  895.    BCC -
  896.    RTS
  897.  
  898. RP┬ANK  .BUF 2
  899. RP┼ND   .BUF 1
  900.  
  901. RECLAIM╨ROC╘YPE = *  ;( .┴=TYPE, .╪=START┬ANK, .┘=END┬ANK )
  902.    STX RP┬ANK+0
  903.    STA RP┬ANK+1
  904.    STY RP┼ND
  905. -  LDA RP┬ANK+0
  906.    LDY RP┬ANK+1
  907.    CMP RP┼ND
  908.    BEQ +
  909.    BCS ++
  910. +  JSR GET╞REEMAP
  911.    JSR RECLAIM╨ROC╞REEMAP
  912.    INC RP┬ANK+0
  913.    BNE -
  914. +  RTS
  915.  
  916. RECLAIM╨ROC╞REEMAP = *  ;( ) : .┘=PAGES╥EMOVED
  917.    LDY #0
  918.    LDX #0
  919.    LDA ACE╨ROCESS╔─
  920.    JMP +
  921. -  INX
  922.    BEQ ++
  923. +  CMP FREEMAP,X
  924.    BNE -
  925.    LDA #0
  926.    STA FREEMAP,X
  927.    INY
  928.    LDA ACE╨ROCESS╔─
  929.    JMP -
  930. +  CPY #0
  931.    BEQ +
  932.    LDA #0
  933.    STA FREEMAP╨AGE
  934.    LDX FREEMAP┬ANK+1
  935.    STA SEARCH═IN╞AIL,X
  936.    LDA #$FF
  937.    STA FREEMAP─IRTY
  938.    TYA
  939.    CLC
  940.    ADC ACE╞REE═EMORY+1
  941.    STA ACE╞REE═EMORY+1
  942.    BCC +
  943.    INC ACE╞REE═EMORY+2
  944.    BNE +
  945.    INC ACE╞REE═EMORY+3
  946. +  CLC
  947.    RTS
  948.  
  949. MIN╒SED┬ANK .BUF ACE═EM╘YPES
  950. MAX╒SED┬ANK .BUF ACE═EM╘YPES  ;PLUS 1
  951.  
  952. CLEAR═EMORY╔NFO = *
  953.    LDX #ACE═EM╘YPES-1
  954. -  LDA #$FF
  955.    STA MIN╒SED┬ANK,X
  956.    LDA #$00
  957.    STA MAX╒SED┬ANK,X
  958.    DEX
  959.    BPL -
  960.    RTS
  961.  
  962. ;*** PROCESS PRIMITIVES
  963.  
  964. RECLAIM╙AVE .BUF 1
  965.  
  966. RECLAIM╧PEN╞ILES = *
  967.    JSR KERNEL├LRCHN
  968.    LDX #0
  969. -  LDA LFTABLE,X
  970.    CMP #LFNULL
  971.    BEQ +
  972.    LDA PIDTABLE,X
  973.    CMP ACE╨ROCESS╔─
  974.    BNE +
  975.    STX RECLAIM╙AVE
  976.    TXA
  977.    JSR CLOSE
  978.    LDX RECLAIM╙AVE
  979. +  INX
  980.    CPX #FCB├OUNT
  981.    BCC -
  982.    RTS
  983.  
  984. ACE═EM╙TAT = *
  985.    LDY #0
  986. -  LDA ACE╞REE═EMORY,Y
  987.    STA 0,X
  988.    LDA ACE╘OTAL═EMORY,Y
  989.    STA 4,X
  990.    INX
  991.    INY
  992.    CPY #4
  993.    BCC -
  994.    LDA ACE╨ROCESS╔─
  995.    CLC
  996.    RTS
  997.  
  998. EXEC┴RGC .BUF 2
  999. EXEC╞RAME .BUF 44+4
  1000. EXEC╙TACK╬EED .BUF 1
  1001. EXEC┴DDR .BUF 2
  1002. EXEC╫ORK .BUF 2
  1003.  
  1004. ACE┼XEC = *
  1005.    STA EXEC┴RGC+0
  1006.    STY EXEC┴RGC+1
  1007.    ;** LOAD EXECUTABLE
  1008.    LDA #<ACE┴PP┴DDRESS
  1009.    LDY #>ACE┴PP┴DDRESS
  1010.    BRK
  1011.    JMP EXEC├OMMON
  1012.  
  1013. ACE┼XEC╙UB = *
  1014.    STA EXEC┴RGC+0
  1015.    STY EXEC┴RGC+1
  1016.    LDA #0
  1017.    STA STRING┬UFFER+0
  1018.    LDA #10
  1019.    STA EXEC╙TACK╬EED
  1020.    LDA ZP+0
  1021.    LDY ZP+1
  1022.  
  1023.    EXEC├OMMON = *
  1024.    STA EXEC┴DDR+0
  1025.    STY EXEC┴DDR+1
  1026.    ;** PUT IN FILENAME
  1027.    LDX #$FF
  1028. -  INX
  1029.    LDA STRING┬UFFER,X
  1030.    BNE -
  1031.    INX
  1032.    STX SYSWORK+0
  1033.    SEC
  1034.    LDA ZW+0
  1035.    SBC SYSWORK+0
  1036.    STA SYSWORK+0
  1037.    LDA ZW+1
  1038.    SBC #0
  1039.    STA SYSWORK+1
  1040.    LDY #0
  1041. -  LDA STRING┬UFFER,Y
  1042.    STA (SYSWORK),Y
  1043.    BEQ +
  1044.    INY
  1045.    BNE -
  1046.  
  1047.    ;** SET UP NEW FRAME INFO
  1048. +  LDX #1
  1049. -  LDA ACE╞RAME╨TR,X
  1050.    STA EXEC╞RAME+0,X
  1051.    LDA ACE┴RGC,X
  1052.    STA EXEC╞RAME+2,X
  1053.    LDA ACE┴RGV,X
  1054.    STA EXEC╞RAME+4,X
  1055.    DEX
  1056.    BPL -
  1057.    LDX #3
  1058. -  LDA MP,X
  1059.    STA EXEC╞RAME+14,X
  1060.    LDA #0
  1061.    STA EXEC╞RAME+18,X
  1062.    LDA #ACE═EM╬ULL
  1063.    STA EXEC╞RAME+24,X
  1064.    DEX
  1065.    BPL -
  1066.    TSX
  1067.    STX EXEC╞RAME+22
  1068.    LDA #$00
  1069.    STA EXEC╞RAME+23
  1070.    LDX #7
  1071. -  LDA MIN╒SED┬ANK,X
  1072.    STA EXEC╞RAME+28,X
  1073.    LDA MAX╒SED┬ANK,X
  1074.    STA EXEC╞RAME+36,X
  1075.    DEX
  1076.    BPL -
  1077.  
  1078.    ;** STORE NEW FRAME INFO
  1079.    LDA ZW+1
  1080.    SBC #0
  1081.    STA SYSWORK+1
  1082.    SEC
  1083.    LDA SYSWORK+0
  1084.    SBC #44
  1085.    STA SYSWORK+0
  1086.    BCS +
  1087.    DEC SYSWORK+1
  1088. +  LDY #43
  1089. -  LDA EXEC╞RAME,Y
  1090.    STA (SYSWORK),Y
  1091.    DEY
  1092.    BPL -
  1093.  
  1094.    ;** SET UP GLOBALS FOR NEW PROCESS
  1095.    LDX #1
  1096. -  LDA SYSWORK+0,X
  1097.    STA ACE╞RAME╨TR,X
  1098.    STA ACE═EM╘OP,X
  1099.    LDA EXEC┴RGC,X
  1100.    STA ACE┴RGC,X
  1101.    LDA ZW,X
  1102.    STA ACE┴RGV,X
  1103.    DEX
  1104.    BPL -
  1105.    JSR CLEAR═EMORY╔NFO
  1106.  
  1107.    ;** CALL THE NEW PROGRAM
  1108.    INC ACE╨ROCESS╔─
  1109.    LDA EXEC┴DDR+0
  1110.    LDY EXEC┴DDR+1
  1111.    STA ZP+0
  1112.    STY ZP+1
  1113.    LDA #0
  1114.    TAX
  1115.    TAY
  1116.    PHA
  1117.    PLP
  1118.    JSR ACE┼NTER
  1119.    LDA #0
  1120.    LDX #0
  1121.    JMP ACE┼XIT
  1122.  
  1123.    ACE┼NTER = *
  1124.    JMP (ZP)
  1125.  
  1126. EXIT├ODE╙AVE .BUF 2
  1127. EXIT┴RGC     .BUF 2
  1128. EXIT┴RGV     .BUF 2
  1129.  
  1130. ACE┼XIT = *
  1131.    STA EXIT├ODE╙AVE+0
  1132.    STX EXIT├ODE╙AVE+1
  1133.    LDA ACE╞RAME╨TR+0
  1134.    LDY ACE╞RAME╨TR+1
  1135.    STA SYSWORK+0
  1136.    STY SYSWORK+1
  1137.    LDY #43
  1138. -  LDA (SYSWORK),Y
  1139.    STA EXEC╞RAME,Y
  1140.    DEY
  1141.    BPL -
  1142.    LDX EXEC╞RAME+22
  1143.    TXS
  1144.    LDX #1
  1145. -  LDA ACE┴RGC,X
  1146.    STA EXIT┴RGC,X
  1147.    LDA ACE┴RGV,X
  1148.    STA EXIT┴RGV,X
  1149.    LDA EXEC╞RAME+2,X
  1150.    STA ACE┴RGC,X
  1151.    LDA EXEC╞RAME+4,X
  1152.    STA ACE┴RGV,X
  1153.    LDA EXEC╞RAME+0,X
  1154.    STA ACE═EM╘OP,X
  1155.    STA ACE╞RAME╨TR,X
  1156.    DEX
  1157.    BPL -
  1158.  
  1159.    JSR RECLAIM╧PEN╞ILES
  1160.    JSR RECLAIM╨ROC═EMORY
  1161.    DEC ACE╨ROCESS╔─
  1162.    LDX #7
  1163. -  LDA EXEC╞RAME+28,X
  1164.    STA MIN╒SED┬ANK,X
  1165.    LDA EXEC╞RAME+36,X
  1166.    STA MAX╒SED┬ANK,X
  1167.    DEX
  1168.    BPL -
  1169.    ;** RELOAD PREVIOUS PROGRAM IF NECESSARY
  1170.    LDA ACE╞RAME╨TR+0
  1171.    LDY ACE╞RAME╨TR+1
  1172.    STA SYSWORK+2
  1173.    STY SYSWORK+3
  1174.    LDA SYSWORK+3
  1175.    CMP ACE╙TACK╘OP+1
  1176.    BCS +
  1177.    LDY #44
  1178.    LDA (SYSWORK+2),Y
  1179.    BEQ +
  1180.    LDA ACE╨ROCESS╔─
  1181.    BRK
  1182.    ;JSR RELOAD_PREVIOUS_PROGRAM
  1183.  
  1184.    ;** PREPARE EXIT PARAMETERS
  1185. +  LDX #3
  1186. -  LDA EXEC╞RAME+14,X
  1187.    STA MP,X
  1188.    DEX
  1189.    BPL -
  1190.    LDX #1
  1191. -  LDA EXIT┴RGC,X
  1192.    STA ZP,X
  1193.    LDA EXIT┴RGV,X
  1194.    STA ZW,X
  1195.    DEX
  1196.    BPL -
  1197.    LDA EXIT├ODE╙AVE+0
  1198.    LDX EXIT├ODE╙AVE+1
  1199.    LDY #0
  1200.    CLC
  1201.    RTS
  1202.  
  1203. ;BLANK LINE AT END
  1204.  
  1205.