home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / ACE12-SRC-1.SFX / ace.s next >
Encoding:
Text File  |  1990-02-12  |  22.1 KB  |  1,588 lines

  1. ;┴├┼-128/64 KERNEL BY ├RAIG ┬RUCE, STARTED 04-═AR-1992.
  2.  
  3. ;* SYSTEM ZERO-PAGE MEMORY USAGE:
  4. ;*   $02-$7F = APPLICATION WORK AREA
  5. ;*   $80-$8F = SYSTEM WORK AREA
  6. ;*   $F8-$FF = SYSTEM PARAMETER AREA
  7.  
  8. ;* INITIAL ┴├┼ ╥┴═0 ORGANIZATION
  9. ;*   $0000-$0EFF = SYSTEM STORAGE
  10. ;*   $0F00-$0FFF = KERNEL INTERFACE VARIABLES
  11. ;*   $1000-$12FF = SYSTEM STORAGE
  12. ;*   $1300-$1FFF = ╙HELL PROGRAM (3.25╦)
  13. ;*   $2000-$27FF = CHARACTER SET (2╦)
  14. ;*   $2800-$6FFF = ┴├┼ KERNEL AND DEVICE DRIVERS (18╦)
  15. ;*   $7000-$BFFF = APPLICATION AREA & STACK (20╦)
  16. ;*   $C000-$FFFF = ╥╧═ AND ╔/╧, ╥┴═ (16╦)  [├128,├64]
  17. ;*   $D800-$DBFF = ╥┴═: SOFT-80 CHARSET [├64,BITMAP]
  18. ;*   $DC00-$DFFF = ╥┴═: COLOR SCREEN [├64,BITMAP]
  19. ;*   $E000-$FFFF = ╥┴═: BITMAPPED SCREEN [├64,BITMAP]
  20.  
  21. ;* FAR MEMORY TYPES
  22. ;*   $00=NULL, $01=REU, $02=INTERNAL-512╦, $06=RL-REU, $07=RL-RAM
  23.  
  24. COMPUTER = 128
  25.  
  26. .SEQ ACEHEAD.S
  27. .SEQ KERNHEAD.S
  28. .ORG $2800
  29.  
  30. .IF COMPUTER-64
  31.    .OBJ "@0:ACE128"
  32. .ELSE
  33.    .OBJ "@0:ACE64"
  34. .IFE
  35.  
  36. JMP ENTRY╨OINT
  37.  
  38. ;***JUMP TABLE
  39.  
  40. JMP ACE╧PEN
  41. JMP ACE├LOSE
  42. JMP ACE╥EAD
  43. JMP ACE╫RITE
  44. JMP ACE╧PEN     ;FASTOPEN
  45. JMP ACE├LOSE    ;FASTCLOSE
  46. JMP ACE╥EAD     ;FASTREAD
  47. JMP ACE┬LOAD
  48. JMP ACE╥EMOVE
  49. JMP ACE╥ENAME
  50. JMP ACE─EV╔NFO
  51. JMP ACE╞CB╙WAP
  52.  
  53. JMP ACE─IR╧PEN
  54. JMP ACE─IR├LOSE
  55. JMP ACE─IR╥EAD
  56. JMP ACE╔SDIR
  57. JMP ACE├H─IR
  58. JMP ACE├D╚OME
  59. JMP ACE═KDIR
  60. JMP ACE╥MDIR
  61.  
  62. JMP ACE┌P╠OAD
  63. JMP ACE┌P╙TORE
  64. JMP ACE╞ETCH
  65. JMP ACE╙TASH
  66. JMP ACE╨AGE┴LLOC
  67. JMP ACE╨AGE╞REE
  68.  
  69. JMP ACE╫INMAX
  70. JMP ACE╫INCLS
  71. JMP ACE╫INSET
  72. JMP ACE╫INSIZE
  73. JMP ACE╫INPUT
  74. JMP ACE╫INCOLOR
  75. JMP ACE╫INPOS
  76. JMP ACE╫INCURSOR
  77. JMP ACE╫INSCROLL
  78.  
  79. JMP CON╥EAD
  80. JMP CON╫RITE
  81. JMP CON╨UTCHAR
  82. JMP CON╨UTCHAR╠IT
  83. JMP ACE╙TOP╦EY
  84. JMP CON╟ETKEY
  85. JMP CON├OLOR
  86. JMP CON╨ALETTE
  87. JMP CON╙CREEN
  88. JMP CON╨OS
  89.  
  90. JMP ACE┼XEC
  91. JMP ACE┼XEC╙UB
  92. JMP ACE┼XIT
  93. JMP ACE═EM╙TAT
  94.  
  95. JMP ACE╒TOA
  96. JMP ACE╟ET─ATE
  97. JMP ACE╙ET─ATE
  98. JMP ACE├MD╧PEN
  99. JMP ACE├MD├LOSE
  100. JMP ACE├MD╙END
  101. JMP ACE├MD╙TATUS
  102. JMP ACE╟R╙CREEN
  103. JMP ACE╟R┼XIT
  104. JMP ACE╟R╞ILL
  105. JMP ACE╟R╠OAD
  106. JMP CON╦EY┴VAIL
  107.  
  108. .BYTE $FF,$FE,$3C,$E2,$FC
  109.  
  110. ;***GLOBAL DECLARATIONS
  111.  
  112. MAX┌P╒SE    = $90
  113. CONFIG┬UF   = $800
  114. KEYLINE┬UF  = $900
  115. FCB╘ABLE1   = $B00
  116.  
  117. .IF COMPUTER-64
  118.    MAX╨AGE = $C0
  119.    BK┴├┼ = $0E
  120.    BK╥AM0 = $3F
  121.    BK╦ERNEL = $00
  122.    BK├HARSET = $0F
  123.    BK╙ELECT = $FF00
  124.    KERNEL╔RQ╚ANDLER = $FA65
  125.    KERNEL┬RK╚ANDLER = $B003
  126.    KERNEL╬MI╚ANDLER = $FA40
  127. .ELSE
  128.    STRING┬UFFER = $A00
  129.    RAM0╞REE═AP  = $1000
  130.    FREEMAP      = $1100
  131.    WORKBUF      = $1200
  132.    MAX╨AGE = $D0
  133.    BK╙ELECT = $01
  134.    BK┴├┼ = $36
  135.    BK╥AM0 = $30
  136.    BK╦ERNEL = $37
  137.    KERNEL╔RQ╚ANDLER = $EA31
  138.    KERNEL┬RK╚ANDLER = $FE66
  139.    KERNEL╬MI╚ANDLER = $FE47
  140. .IFE
  141.  
  142. CIA1  = $DC00
  143. ST    = $90
  144. TRUE  = $FF
  145. FALSE = $00
  146. CHR┬┼╠ = $07
  147. CHR╘┴┬ = $09
  148. CHR╠╞ = $0A
  149. CHR├╥ = $0D
  150. CHR┬╙ = $14
  151. CHR├╠╥ = $93
  152. CHR╤╒╧╘┼ = $22
  153.  
  154. FCB├OUNT = 16
  155. LFTABLE   .BUF FCB├OUNT
  156. DEVTABLE  .BUF FCB├OUNT
  157. SATABLE   .BUF FCB├OUNT
  158. EOFTABLE  .BUF FCB├OUNT
  159. PIDTABLE  .BUF FCB├OUNT
  160. LFNULL = $FF
  161. FCB╬ULL = $FF
  162. MIN─ISK = 8
  163. REGSAVE .BUF 3
  164.  
  165. NEWLF .BUF 1
  166.  
  167. KERNEL├LALL  = $FFE7
  168. KERNEL╙ETBNK = $FF68
  169. KERNEL╙ETMSG = $FF90
  170. KERNEL╥EADST = $FFB7
  171. KERNEL╙ETLFS = $FFBA
  172. KERNEL╙ETNAM = $FFBD
  173. KERNEL╧PEN   = $FFC0
  174. .IF COMPUTER-64
  175. KERNEL├LOSE  = $FFC3
  176. .IFE
  177. KERNEL├HKIN  = $FFC6
  178. KERNEL├HKOUT = $FFC9
  179. KERNEL├LRCHN = $FFCC
  180. KERNEL├HRIN  = $FFCF
  181. KERNEL├HROUT = $FFD2
  182. KERNEL╠OAD   = $FFD5
  183. KERNEL╙TOP   = $FFE1
  184. KERNEL╟ETIN  = $FFE4
  185. KERNEL╙CRORG = $FFED
  186. KERNEL╙WAPPER = $FF5F
  187.  
  188. .IF COMPUTER-64
  189.    ;128 NOTHING HERE
  190. .ELSE
  191. ;*** KERNEL CLOSE WITH PSEUDO-CLOSE FOR DISK COMMAND CHANNEL FOR THE 64
  192. KERNEL├LOSE = *
  193.    BCS +
  194.    JMP $FFC3
  195. +  LDX $98
  196. -  DEX
  197.    BMI KERNEL├LOSE┼XIT
  198.    CMP $259,X
  199.    BNE -
  200.    BEQ +
  201.    BRK
  202.    ;** FOUND ENTRY; COPY LAST ENTRY ON TOP IF IT
  203. +  LDY $98
  204.    DEY
  205.    LDA $259,Y   ;MOVE LFN
  206.    STA $259,X
  207.    LDA $263,Y   ;MOVE DEV NUM
  208.    STA $263,X
  209.    LDA $26D,Y   ;MOVE SEC ADDR
  210.    STA $26D,X
  211.    DEC $98
  212.    KERNEL├LOSE┼XIT = *
  213.    CLC
  214.    RTS
  215. .IFE
  216.  
  217. ;*** ENTRYPOINT()
  218.  
  219. ENTRY╨OINT = *
  220.    LDA #0
  221.    PHA
  222.    PLP
  223.    LDA #BK┴├┼
  224.    STA BK╙ELECT
  225.    JMP MAIN
  226.  
  227. ;*** STARTUP()
  228.  
  229. ACE┬OOTSTRAP = *
  230.    PHP
  231.    SEI
  232.    LDX #2
  233. -  LDA $00,X
  234.    STA BASIC┌P╙AVE,X
  235.    LDA #0
  236.    STA $00,X
  237.    INX
  238.    CPX #MAX┌P╒SE
  239.    BCC -
  240.    LDA #<IRQ╚ANDLER
  241.    LDY #>IRQ╚ANDLER
  242.    STA $314
  243.    STY $315
  244.    LDA #<BRK╚ANDLER
  245.    LDY #>BRK╚ANDLER
  246.    STA $316
  247.    STY $317
  248.    LDA #<NMI╚ANDLER
  249.    LDY #>NMI╚ANDLER
  250.    STA $318
  251.    STY $319
  252.    LDX #127
  253.    LDA #0
  254. -  STA ERRNO,X
  255.    DEX
  256.    BPL -
  257.    LDA #$04  ;"A:"
  258.    STA ACE├URRENT─EVICE
  259.    LDA #0
  260.    JSR KERNEL╙ETMSG
  261. .IF COMPUTER-64
  262.    LDA #0
  263.    LDX #0
  264.    JSR KERNEL╙ETBNK
  265. .IFE
  266.    JSR KERNEL├LALL
  267.    PLP
  268.    RTS
  269.  
  270. ACE├ONFIG = *
  271.    LDA #0
  272.    LDX BOOT─EVICE
  273.    LDY #0
  274.    JSR KERNEL╙ETLFS
  275.    LDA #6
  276.    LDX #<ACE├ONFIG╬AME
  277.    LDY #>ACE├ONFIG╬AME
  278.    JSR KERNEL╙ETNAM
  279.    LDA #0
  280.    LDX #<ACE┴PP┴DDRESS
  281.    LDY #>ACE┴PP┴DDRESS
  282.    JSR KERNEL╠OAD
  283.    BCC +
  284.    RTS
  285. +  LDA #<CONFIG┬UF
  286.    LDY #>CONFIG┬UF
  287.    STA 2
  288.    STY 3
  289.    LDA #<ACE╙TARTUP═SG
  290.    LDY #>ACE╙TARTUP═SG
  291.    STA 4
  292.    STY 5
  293.    LDA #<RAM0╞REE═AP
  294.    LDY #>RAM0╞REE═AP
  295.    STA 6
  296.    STY 7
  297.    LDX #>ACE┬SS┼ND
  298.    LDA #<ACE┬SS┼ND
  299.    BEQ +
  300.    INX
  301. +  STX 8
  302.    .IF COMPUTER-64
  303.    LDA #128
  304.    .ELSE
  305.    LDA #64
  306.    .IFE
  307.    STA 9
  308.    LDA #<CHARSET4BIT
  309.    LDY #>CHARSET4BIT
  310.    STA 10
  311.    STY 11
  312.    JSR ACE┴PP┴DDRESS
  313.    RTS
  314.    ACE├ONFIG╬AME = *
  315.    .ASC "CONFIG"
  316.  
  317. ACE╙TARTUP = *
  318.    LDX #FCB├OUNT-1
  319.    LDA #LFNULL
  320. -  STA LFTABLE,X
  321.    DEX
  322.    BPL -
  323.    LDA #0
  324.    STA NEWLF
  325.    LDA ACE├URRENT─EVICE
  326.    LSR
  327.    LSR
  328.    ORA #$40
  329.    STA ACE├UR─IR╬AME+0
  330.    LDA #":"
  331.    STA ACE├UR─IR╬AME+1
  332.    LDA #0
  333.    STA ACE├UR─IR╬AME+2
  334.    JSR INIT╙TACK
  335.    LDX #31
  336. -  LDA CONFIG┬UF+$E0,X
  337.    STA ACE╙HELL╨ATH,X
  338.    DEX
  339.    BPL -
  340.    LDA #0
  341.    STA ACE╙HELL┴LIAS
  342.    LDA #1
  343.    STA ACE╨ROCESS╔─
  344.    RTS
  345.  
  346. INIT╙TACK = *
  347.    LDA #ACE╔─1
  348.    STA ACE╔─+0
  349.    LDA #ACE╔─2
  350.    STA ACE╔─+1
  351.    LDA #0
  352.    .IF COMPUTER-64
  353.    LDY CONFIG┬UF+$A8
  354.    .ELSE
  355.    LDY CONFIG┬UF+$C6
  356.    .IFE
  357.    CPY #MAX╨AGE
  358.    BCC +
  359.    LDY #MAX╨AGE
  360. +  STA ACE╙TACK╘OP+0
  361.    STY ACE╙TACK╘OP+1
  362.    STA ACE═EM╘OP+0
  363.    STY ACE═EM╘OP+1
  364.    STA ACE╞RAME╨TR+0
  365.    STY ACE╞RAME╨TR+1
  366.    RTS
  367.  
  368. ;*** SHUTDOWN()
  369.  
  370. ACE╙HUTDOWN = *
  371.    LDA #BK┴├┼
  372.    STA BK╙ELECT
  373.    LDX #2
  374. -  LDA BASIC┌P╙AVE,X
  375.    STA $00,X
  376.    INX
  377.    CPX #MAX┌P╒SE
  378.    BCC -
  379.    PHP
  380.    SEI
  381.    LDA #<KERNEL╔RQ╚ANDLER
  382.    LDY #>KERNEL╔RQ╚ANDLER
  383.    STA $314
  384.    STY $315
  385.    LDA #<KERNEL┬RK╚ANDLER
  386.    LDY #>KERNEL┬RK╚ANDLER
  387.    STA $316
  388.    STY $317
  389.    LDA #<KERNEL╬MI╚ANDLER
  390.    LDY #>KERNEL╬MI╚ANDLER
  391.    STA $318
  392.    STY $319
  393. .IF COMPUTER-64
  394. .ELSE
  395.    LDA #%10000001
  396.    STA $DC0D
  397.    LDA #%01111111
  398.    STA $DD0D
  399.    BIT $DC0D
  400.    BIT $DD0D
  401.    LDA #%00000000
  402.    STA VIC+$1A
  403. .IFE
  404.    PLP
  405.    RTS
  406.  
  407. ACE╙HUTDOWN┬ASIC = *
  408. .IF COMPUTER-64
  409.    JSR VDC╙HUTDOWN
  410.    JSR VIC╙HUTDOWN
  411.    LDA TEXT═ODE
  412.    EOR $D7
  413.    BPL +
  414.    JSR KERNEL╙WAPPER
  415. +  NOP
  416. .ELSE
  417.    LDA #25
  418.    LDX #40
  419.    ;XX CHECK CONFIG FOR SCREEN
  420.    JSR CONSCREEN
  421. .IFE
  422.    JSR ACE╙HUTDOWN
  423.    LDA #147
  424.    JSR KERNEL├HROUT
  425.    LDA #BK╦ERNEL
  426.    STA BK╙ELECT
  427. .IF COMPUTER-64
  428.    LDA #0
  429.    STA $F8
  430.    STA $F9
  431.    LDA #$16
  432.    STA 2604
  433.    STA $D018
  434.    LDA #0
  435.    STA $1C00
  436.    STA 208
  437.    JSR $51D6
  438.    JMP $4DB7
  439. .ELSE
  440.    LDA #$16
  441.    STA $D018
  442.    LDA #0
  443.    STA $800
  444.    STA 198
  445.    JSR $A642
  446.    JMP $A474
  447. .IFE
  448.    BRK
  449.  
  450. RESET╔NT─ISPATCH = *  ;FOR ├64 ONLY, ╥┴═0
  451.    LDX #$FF
  452.    SEI
  453.    TXS
  454.    CLD
  455.    LDA #BK╦ERNEL
  456.    STA BK╙ELECT
  457.    JMP $FCE2
  458.  
  459. NMI╔NT─ISPATCH = *  ;FOR ├64 ONLY, ╥┴═0
  460.    SEI
  461.  
  462. NMI╚ANDLER = *
  463. .IF COMPUTER-64
  464.    CLD
  465.    LDA #BK┴├┼
  466.    STA BK╙ELECT
  467.    LDA #$7F
  468.    STA $DD0D
  469.    LDY $DD0D
  470.    BMI +
  471. -  LDA $DC01
  472.    CMP $DC01
  473.    BNE -
  474.    AND #$80
  475.    BMI +
  476.    JSR ACE╙HUTDOWN
  477.    ;JSR SHUTDOWN═EMORY
  478.    ;LDA #147
  479.    ;JSR KERNEL├HROUT
  480.    ;JMP ACE╙HUTDOWN┬ASIC
  481.    JSR $E056
  482.    JSR $E109
  483.    JSR $C000
  484.    LDA #0
  485.    STA $1C00
  486.    LDA #BK╦ERNEL
  487.    STA BK╙ELECT
  488.    JSR $51D6
  489.    JMP ($0A00)
  490. +  JMP $FF33
  491. .ELSE
  492.    CLD
  493.    PHA
  494.    TXA
  495.    PHA
  496.    TYA
  497.    PHA
  498.    LDA BK╙ELECT
  499.    PHA
  500.    LDA #BK╦ERNEL
  501.    STA BK╙ELECT
  502.    LDA #$7F
  503.    STA $DD0D
  504.    LDY $DD0D
  505.    BMI +
  506. -  LDA $DC01
  507.    CMP $DC01
  508.    BNE -
  509.    AND #$80
  510.    BMI +
  511.    JSR ACE╙HUTDOWN
  512.    JSR $FD15
  513.    JSR $FDA3
  514.    JSR $E518
  515.    LDA #0
  516.    STA $800
  517.    JSR $A642
  518.    JMP ($A002)
  519. +  PLA
  520.    STA BK╙ELECT
  521.    PLA
  522.    TAY
  523.    PLA
  524.    TAX
  525.    PLA
  526.    RTI
  527. .IFE
  528.  
  529. ACE╔RQ╔NIT = *
  530.    PHP
  531.    SEI
  532. .IF COMPUTER-64
  533. .ELSE
  534.    LDX #5
  535. -  LDA C64╔NT╓ECS,X
  536.    STA $FFFA,X
  537.    DEX
  538.    BPL -
  539. .IFE
  540.    LDA #<IRQ╚ANDLER
  541.    LDY #>IRQ╚ANDLER
  542.    STA $314
  543.    STY $315
  544.    LDA #%01111111
  545.    STA $DC0D
  546.    STA $DD0D
  547.    BIT $DC0D
  548.    BIT $DD0D
  549.    LDA VIC+$11
  550.    AND #%01111111
  551.    ORA #%00000000
  552.    STA VIC+$11
  553.    LDA #252
  554.    STA VIC+$12
  555.    LDA #%00000000
  556.    STA VIC+$1A
  557.    LDA #%10001111
  558.    STA VIC+$19
  559.    PLP
  560.    RTS
  561.  
  562. C64╔NT╓ECS = *
  563.    .WORD NMI╔NT─ISPATCH,RESET╔NT─ISPATCH,IRQ╔NT─ISPATCH
  564.  
  565. IRQ╔NT─ISPATCH = *  ;FOR ├64 ONLY, ╥┴═0
  566.    PHA
  567.    TXA
  568.    PHA
  569.    TYA
  570.    PHA
  571.    LDA BK╙ELECT
  572.    PHA
  573.    LDA #BK╦ERNEL
  574.    STA BK╙ELECT
  575.    CLD
  576.    TSX
  577.    LDA $0105,X
  578.    AND #$10
  579.    BEQ IRQ╚ANDLER╔NT64
  580.    JMP BRK╚ANDLER
  581.  
  582. IRQ╚ANDLER = *  ;(.┴╪┘ ALREADY SAVED, 128 BANK)
  583.    CLD
  584. .IF COMPUTER-64
  585. .ELSE
  586.    LDA BK╙ELECT
  587.    PHA
  588. .IFE
  589.    IRQ╚ANDLER╔NT64 = *
  590.    LDA #BK┴├┼
  591.    STA BK╙ELECT
  592.    LDA VIC+$19
  593.    BPL +
  594.    AND #1
  595.    BNE SIXTY
  596. +  LDA $DC0D
  597.    JMP IRQ┼XIT
  598.  
  599. SIXTY = *
  600.    STA VIC+$19
  601.    JSR CON╙CREEN╙AVE
  602.    JSR VIC╔RQ├URSOR
  603.    JSR VDC╔RQ├URSOR
  604.    JSR CON╔RQ╦EYSCAN
  605.    JMP IRQ┼XIT
  606.  
  607. .IF COMPUTER-64
  608. IRQ┼XIT = $FF33
  609. .ELSE
  610. IRQ┼XIT = *
  611.    PLA
  612.    STA BK╙ELECT
  613.    PLA
  614.    TAY
  615.    PLA
  616.    TAX
  617.    PLA
  618.    RTI
  619. .IFE
  620.  
  621. BRK╚ANDLER = *
  622.    CLD
  623.    LDX #0
  624. -  LDA $00,X
  625.    STA $0400,X
  626.    DEX
  627.    BNE -
  628.    JSR ACE╙HUTDOWN
  629. .IF COMPUTER-64
  630.    LDA #0
  631.    STA $1C00
  632.    ;JSR $51D6
  633. .ELSE
  634.    LDA #0
  635.    STA $800
  636.    JSR $A642
  637. .IFE
  638.    JMP KERNEL┬RK╚ANDLER
  639.  
  640. ;*** GET─EVICE( ZP=FILENAME┌ ) : .┴=DEVICE, .┘=SCAN╨OS
  641.  
  642. GET─EVICE = *
  643.    LDY #0
  644.    LDA (ZP),Y
  645.    BEQ USE─EFAULT
  646.    LDY #1
  647.    LDA (ZP),Y
  648.    CMP #":"
  649.    BNE USE─EFAULT
  650.    LDY #0
  651.    LDA (ZP),Y
  652.    LDY #2
  653.    CMP #"."
  654.    BNE +
  655.    LDA ACE├URRENT─EVICE
  656.    JMP GOT─EV
  657. +  AND #$1F
  658.    ASL
  659.    ASL
  660.    JMP GOT─EV
  661.    
  662.    USE─EFAULT = *
  663.    LDA ACE├URRENT─EVICE
  664.    LDY #0
  665.  
  666.    GOT─EV = *
  667.    RTS
  668.    
  669. GET╠F┴ND╞CB = * ;() : .╪=FCB, .┴=LF
  670.    OPEN╠F╙EARCH = *
  671.    INC NEWLF
  672.    LDA NEWLF
  673.    AND #$7F
  674.    LDX #FCB├OUNT-1
  675. -  CMP LFTABLE,X
  676.    BEQ OPEN╠F╙EARCH
  677.    DEX
  678.    BPL -
  679.    TAY
  680.    LDX #0
  681. -  LDA LFTABLE,X
  682.    BMI +
  683.    INX
  684.    CPX #FCB├OUNT
  685.    BCC -
  686.    LDA #ACE┼RR╘OO═ANY╞ILES
  687.    STA ERRNO
  688.    SEC
  689.    RTS
  690. +  LDA ACE╨ROCESS╔─
  691.    STA PIDTABLE,X
  692.    TYA
  693.    CLC
  694.    RTS
  695.  
  696. ;*** ISDIR( (ZP)=╞ILENAME┌ ) : .┴=─EV, .╪=IS─ISK, .┘=IS─IR
  697.  
  698. ACE╔SDIR = *
  699.    JSR GET─EVICE
  700.    PHA
  701.    TAX
  702.    LDA CONFIG┬UF+0,X
  703.    CMP #1
  704.    BEQ +
  705.    CMP #4
  706.    BEQ +
  707.    LDX #FALSE
  708.    LDY #FALSE
  709.    JMP IS─IR┼XIT
  710.    LDX #TRUE
  711. +  LDY #255
  712. -  INY
  713.    LDA (ZP),Y
  714.    BNE -
  715.    DEY
  716.    LDA (ZP),Y
  717.    LDY #TRUE
  718.    CMP #":"
  719.    BEQ IS─IR┼XIT
  720.    LDY #FALSE
  721.  
  722.    IS─IR┼XIT = *
  723.    PLA
  724.    RTS
  725.  
  726. ;*** OPEN( ZP=FILENAME┌, .┴=MODE["R","W","A"] ) : .┴=FCB
  727.  
  728. OPEN╞CB      = SYSWORK+0
  729. OPEN╬AME╙CAN = SYSWORK+1
  730. OPEN═ODE     = SYSWORK+2
  731. OPEN╬AME╠ENGTH = SYSWORK+3
  732. OPEN─EVICE   = SYSWORK+4
  733. CHECK╙TAT .BUF 1
  734.  
  735. ACE╧PEN = *
  736.    STA OPEN═ODE
  737.    LDA #TRUE
  738.    STA CHECK╙TAT
  739.    JSR GET╠F┴ND╞CB
  740.    BCC +
  741.    RTS
  742. +  STA LFTABLE,X
  743.    LDA #$00
  744.    STA EOFTABLE,X
  745.    STX OPEN╞CB
  746.    JSR GET─EVICE
  747.    STY OPEN╬AME╙CAN
  748.    LDX OPEN╞CB
  749.    STA DEVTABLE,X
  750.    STA OPEN─EVICE
  751.    TAX
  752.  
  753.    ;GET SA HERE
  754.    LDA CONFIG┬UF+0,X
  755.    CMP #0
  756.    BNE +
  757.    LDY CONFIG┬UF+2,X
  758.    JMP NON─ISK╙A
  759. +  LDY #0
  760.    CMP #1
  761.    BEQ OPEN─ISK╙A
  762.    ;** CHECK CONSOLE
  763.    CMP #2
  764.    BNE +
  765. -  LDA OPEN╞CB
  766.    CLC
  767.    RTS
  768.    ;** CHECK NULL DEVICE
  769. +  CMP #3
  770.    BEQ -
  771.    ;** CHECK RAMDISK DEVICE
  772.    CMP #4
  773.    BNE +
  774.    JMP RD╧PEN
  775.    ;** CHECK PARALLEL PORT DEVICE
  776. +  CMP #5
  777.    BNE +
  778.    JMP PAR╧PEN
  779.    ;** ILLEGAL DEVICE
  780. +  LDA #ACE┼RR╔LLEGAL─EVICE
  781.    STA ERRNO
  782.    SEC
  783.    RTS
  784.  
  785.    OPEN─ISK╙A = *
  786.    LDY #2
  787.    DISK╙A╙EARCH = *
  788.    LDX #FCB├OUNT-1
  789. -  LDA LFTABLE,X
  790.    BMI +
  791.    LDA DEVTABLE,X
  792.    CMP OPEN─EVICE
  793.    BNE +
  794.    TYA
  795.    CMP SATABLE,X
  796.    BNE +
  797.    INY
  798.    BNE DISK╙A╙EARCH
  799. +  DEX
  800.    BPL -
  801.  
  802.    NON─ISK╙A = *
  803.    LDX OPEN╞CB
  804.    TYA
  805.    STA SATABLE,X
  806.  
  807.    ;SET THE NAME
  808.    LDX #0
  809.    LDY OPEN╬AME╙CAN
  810. -  LDA (ZP),Y
  811.    STA STRING┬UFFER,X
  812.    BEQ +
  813.    INY
  814.    INX
  815.    BNE -
  816. +  LDY OPEN─EVICE
  817.    LDA CONFIG┬UF+0,Y
  818.    CMP #1
  819.    BNE NON─ISK╧PEN
  820.    ;** STICK THE MODE FOR DISK FILES
  821.    CPX #0
  822.    BNE +
  823.    LDA #ACE┼RR╧PEN─IRECTORY
  824.    SEC
  825.    RTS
  826. +  LDA #","
  827.    STA STRING┬UFFER,X
  828.    INX
  829.    LDA OPEN═ODE
  830.    STA STRING┬UFFER,X
  831.    INX
  832.    JMP OPEN╟OT╬AME
  833.  
  834.    ;** GET RID OF THE FILENAME FOR NON-DISKS
  835.    NON─ISK╧PEN = *
  836.    LDX #0
  837.  
  838.    OPEN╟OT╬AME = *
  839.    ;** DISPATCH HERE FOR NON-KERNEL DEVICES
  840.    TXA
  841.    LDX #<STRING┬UFFER
  842.    LDY #>STRING┬UFFER
  843.    JSR KERNEL╙ETNAM
  844.  
  845.    ;SET LFS
  846.    LDX OPEN╞CB
  847.    LDA LFTABLE,X
  848.    PHA
  849.    LDA SATABLE,X
  850.    TAY
  851.    LDA DEVTABLE,X
  852.    TAX
  853.    LDA CONFIG┬UF+1,X
  854.    TAX
  855.    PLA
  856.    JSR KERNEL╙ETLFS
  857.  
  858.    ;DO THE OPEN
  859.    JSR KERNEL╧PEN
  860.    BCS OPEN┼RROR
  861. +  LDX OPEN─EVICE
  862.    LDA CONFIG┬UF+0,X
  863.    CMP #1
  864.    BNE +
  865.    LDA CHECK╙TAT
  866.    BEQ +
  867.    TXA
  868.    JSR OPEN─ISK╙TATUS
  869.    BCC +
  870.  
  871.    OPEN┼RROR = *
  872.    STA ERRNO
  873.    LDX OPEN╞CB
  874.    LDA LFTABLE,X
  875.    CLC
  876.    JSR KERNEL├LOSE
  877.    LDX OPEN╞CB
  878.    LDA #LFNULL
  879.    STA LFTABLE,X
  880.    SEC
  881.    LDA #FCB╬ULL
  882.    RTS
  883. +  LDA OPEN╞CB
  884.    CLC
  885.    RTS
  886.  
  887. OPEN─ISK╙TATUS = *  ;( .┴=DEVICE ) : ERRNO=.┴=ERRCODE, .├╙=ERRFLAG
  888.    JSR CMDCH╧PEN
  889.    BCS +
  890.    JSR CHECK─ISK╙TATUS
  891.    PHP
  892.    PHA
  893.    JSR CMDCH├LOSE
  894.    PLA
  895.    PLP
  896. +  RTS
  897.  
  898. CMDCH╧PEN = *  ;( .┴=DEVICE )
  899.    PHA
  900.    JSR CMDCH├LOSE
  901.    PLA
  902.    TAX
  903.    LDA CONFIG┬UF+1,X
  904.    TAX
  905.    LDY #15
  906.    LDA #LFNULL
  907.    JSR KERNEL╙ETLFS
  908.    LDA #0
  909.    JSR KERNEL╙ETNAM
  910.    JSR KERNEL╧PEN
  911.    BCC +
  912.    STA ERRNO
  913. +  RTS
  914.  
  915. CMDCH╙END = *  ;( STRING┬UFFER )
  916.    LDX #LFNULL
  917.    JSR KERNEL├HKOUT
  918.    BCS CMDCH┼RR
  919.    LDX #0
  920. -  LDA STRING┬UFFER,X
  921.    BEQ +
  922.    JSR KERNEL├HROUT
  923.    BCS CMDCH┼RR
  924.    INX
  925.    BNE -
  926. +  JSR KERNEL├LRCHN
  927.    CLC
  928.    RTS
  929.  
  930.    CMDCH┼RR = *
  931.    STA ERRNO
  932.    PHA
  933.    JSR KERNEL├LRCHN
  934.    PLA
  935.    SEC
  936.    RTS
  937.  
  938. CHECK─ISK╙TATUS├ODE .BUF 1
  939.  
  940. CHECK─ISK╙TATUS = *
  941.    LDX #LFNULL
  942.    JSR KERNEL├HKIN
  943.    BCS CMDCH┼RR
  944.    JSR KERNEL├HRIN
  945.    BCS CMDCH┼RR
  946.    AND #$0F
  947.    STA CHECK─ISK╙TATUS├ODE
  948.    ASL
  949.    ASL
  950.    ADC CHECK─ISK╙TATUS├ODE
  951.    ASL
  952.    STA CHECK─ISK╙TATUS├ODE
  953.    JSR KERNEL├HRIN
  954.    BCS CMDCH┼RR
  955.    AND #$0F
  956.    CLC
  957.    ADC CHECK─ISK╙TATUS├ODE
  958.    STA CHECK─ISK╙TATUS├ODE
  959. -  JSR KERNEL╥EADST
  960.    AND #$80
  961.    BEQ +
  962.    LDA #ACE┼RR─EVICE╬OT╨RESENT
  963.    SEC
  964.    BCS CMDCH┼RR
  965. +  JSR KERNEL├HRIN
  966.    BCS CMDCH┼RR
  967.    CMP #CHR├╥
  968.    BNE -
  969.    JSR KERNEL├LRCHN
  970.    LDA CHECK─ISK╙TATUS├ODE
  971.    CMP #62
  972.    BNE +
  973.    LDA #ACE┼RR╞ILE╬OT╞OUND
  974.    STA ERRNO
  975.    SEC
  976.    RTS
  977. +  CMP #20
  978.    BCC +
  979.    STA ERRNO
  980. +  RTS
  981.  
  982. CMDCH├LOSE = *
  983.    SEC
  984.    LDA #LFNULL
  985.    JSR KERNEL├LOSE
  986.    BCC +
  987.    STA ERRNO
  988. +  RTS
  989.  
  990. ;*** CLOSE( .┴=FCB )
  991.  
  992. CLOSE╞D .BUF 1
  993.  
  994. ACE├LOSE = *
  995.    TAX
  996.    LDA PIDTABLE,X
  997.    CMP ACE╨ROCESS╔─
  998.    BEQ +
  999.    CLC
  1000.    RTS
  1001. +  LDY DEVTABLE,X
  1002.    STX CLOSE╞D
  1003.    LDA CONFIG┬UF+0,Y
  1004.    CMP #2
  1005.    BNE +
  1006.    JMP CLOSE╞D┼NTRY
  1007. +  CMP #3
  1008.    BNE +
  1009.    JMP CLOSE╞D┼NTRY
  1010. +  CMP #4
  1011.    BNE +
  1012.    JSR RD├LOSE
  1013.    JMP CLOSE╞D┼NTRY
  1014. +  CMP #5
  1015.    BNE +
  1016.    JMP PAR├LOSE
  1017. +  LDX CLOSE╞D
  1018.    LDA LFTABLE,X
  1019.    JSR KERNEL├LOSE
  1020.  
  1021.    CLOSE╞D┼NTRY = *
  1022.    LDX CLOSE╞D
  1023.    LDA #LFNULL
  1024.    STA LFTABLE,X
  1025.    CLC
  1026.    RTS
  1027.  
  1028. ;*** READ( .╪=FCB, (ZP)=DATA, .┴┘=MAX╠ENGTH ) : .┴┘=(ZW)=LENGTH, .┌=EOF
  1029.  
  1030. READ═AX╠EN     = SYSWORK+0
  1031. READ╨TR        = SYSWORK+2
  1032. READ╠ENGTH     = SYSWORK+4
  1033. READ╞CB        = SYSWORK+6
  1034. READ─EVICE─ISK = SYSWORK+7
  1035.  
  1036. ACE╥EAD = *
  1037.    STA READ═AX╠EN+0
  1038.    STY READ═AX╠EN+1
  1039.    STX READ╞CB
  1040.    LDA ZP+0
  1041.    LDY ZP+1
  1042.    STA READ╨TR+0
  1043.    STY READ╨TR+1
  1044.    LDA #0
  1045.    STA READ╠ENGTH+0
  1046.    STA READ╠ENGTH+1
  1047.    LDA EOFTABLE,X
  1048.    BEQ +
  1049.    JMP READ┼OF┼XIT
  1050. +  LDY #0
  1051.    LDA DEVTABLE,X
  1052.    TAX
  1053.    LDA CONFIG┬UF+0,X
  1054.    CMP #4
  1055.    BNE +
  1056.    JMP RD╥EAD
  1057. +  CMP #5
  1058.    BNE +
  1059.    JMP PAR╥EAD
  1060. +  CMP #2
  1061.    BNE +
  1062.    LDA READ═AX╠EN+0
  1063.    LDY READ═AX╠EN+1
  1064.    LDX READ╞CB
  1065.    JMP CON╥EAD
  1066. +  CMP #3
  1067.    BNE +
  1068.    LDA #0
  1069.    LDY #0
  1070.    STA ZW+0
  1071.    STY ZW+1
  1072.    CLC
  1073.    RTS
  1074. +  CMP #1
  1075.    BNE +
  1076.    LDY #$FF
  1077. +  LDX READ╞CB
  1078.    STY READ─EVICE─ISK
  1079.    LDA LFTABLE,X
  1080.    TAX
  1081.    JSR KERNEL├HKIN
  1082.    BCC READ┬YTE
  1083.    STA ERRNO
  1084.    RTS
  1085.    
  1086.    READ┬YTE = *
  1087.    LDA READ╠ENGTH+0
  1088.    CMP READ═AX╠EN+0
  1089.    LDA READ╠ENGTH+1
  1090.    SBC READ═AX╠EN+1
  1091.    BCS READ┼XIT
  1092.    JSR KERNEL├HRIN
  1093.    LDY #0
  1094.    STA (READ╨TR),Y
  1095.    INC READ╨TR+0
  1096.    BNE +
  1097.    INC READ╨TR+1
  1098. +  INC READ╠ENGTH+0
  1099.    BNE +
  1100.    INC READ╠ENGTH+1
  1101. +  BIT READ─EVICE─ISK
  1102.    BPL READ┬YTE
  1103.    LDA ST
  1104.    AND #$40
  1105.    BEQ READ┬YTE
  1106.    LDX READ╞CB
  1107.    STA EOFTABLE,X
  1108.  
  1109.    READ┼XIT = *
  1110.    JSR KERNEL├LRCHN
  1111.    READ┼XIT╬OCLR = *
  1112.    LDA READ╠ENGTH+0
  1113.    LDY READ╠ENGTH+1
  1114.    STA ZW+0
  1115.    STY ZW+1
  1116.    LDX #$FF
  1117.    CLC
  1118.    RTS
  1119.  
  1120.    READ┼OF┼XIT = *
  1121.    LDA #0
  1122.    LDY #0
  1123. +  STA ZW+0
  1124.    STY ZW+1
  1125.    CLC
  1126.    RTS
  1127.  
  1128. ;*** WRITE( .╪=FCB, (ZP)=DATA, .┴┘=LENGTH )
  1129.  
  1130. WRITE╠ENGTH = SYSWORK+0
  1131. WRITE╨TR    = SYSWORK+2
  1132.  
  1133. ACE╫RITE = *
  1134.    STA WRITE╠ENGTH+0
  1135.    STY WRITE╠ENGTH+1
  1136.    LDA ZP+0
  1137.    LDY ZP+1
  1138.    STA WRITE╨TR+0
  1139.    STY WRITE╨TR+1
  1140.    STX REGSAVE+1
  1141.    LDA DEVTABLE,X
  1142.    TAX
  1143.    LDA CONFIG┬UF+0,X
  1144.    ;** CHECK RAMDISK
  1145.    CMP #4
  1146.    BNE +
  1147.    JMP RD╫RITE
  1148.    ;** CHECK PARALLEL PORT
  1149. +  CMP #5
  1150.    BNE +
  1151.    JMP PAR╫RITE
  1152.    ;** CHECK CONSOLE
  1153. +  CMP #2
  1154.    BNE +
  1155.    LDA WRITE╠ENGTH+0
  1156.    LDY WRITE╠ENGTH+1
  1157.    LDX REGSAVE+1
  1158.    JMP CON╫RITE
  1159.    ;** CHECK NULL DEVICE
  1160. +  CMP #3
  1161.    BNE +
  1162.    CLC
  1163.    RTS
  1164. +  LDX REGSAVE+1
  1165.    LDA LFTABLE,X
  1166.    TAX
  1167.    JSR KERNEL├HKOUT
  1168.    BCC WRITE┬YTE
  1169.    RTS
  1170.  
  1171.    WRITE┬YTE = *
  1172.    LDA WRITE╠ENGTH+0
  1173.    ORA WRITE╠ENGTH+1
  1174.    BEQ WRITE╞INISH
  1175.    LDY #0
  1176.    LDA (WRITE╨TR),Y
  1177.    JSR KERNEL├HROUT
  1178.    BCC +
  1179.    STA ERRNO
  1180.    JSR KERNEL├LRCHN
  1181.    SEC
  1182.    RTS
  1183. +  INC WRITE╨TR+0
  1184.    BNE +
  1185.    INC WRITE╨TR+1
  1186. +  LDA WRITE╠ENGTH+0
  1187.    BNE +
  1188.    DEC WRITE╠ENGTH+1
  1189. +  DEC WRITE╠ENGTH+0
  1190.    JMP WRITE┬YTE
  1191.    
  1192.    WRITE╞INISH = *
  1193.    JSR KERNEL├LRCHN
  1194.    CLC
  1195.    RTS
  1196.  
  1197. ;*** CMDOPEN( (ZP)=─EV╬AME ) : .┴=╞CB
  1198.  
  1199. GET─ISK─EVICE = *  ;( (ZP)=DEVNAME ) : .┴=DEVICE, .┘=SCAN, .╪=DEV_T, .├├=IS─ISK
  1200.    JSR GET─EVICE
  1201.    PHA
  1202.    TAX
  1203.    LDA CONFIG┬UF+0,X
  1204.    CMP #1
  1205.    BNE +
  1206. -  TAX
  1207.    PLA
  1208.    CLC
  1209.    RTS
  1210. +  CMP #4
  1211.    BEQ -
  1212.    PLA
  1213.    LDA #ACE┼RR─ISK╧NLY╧PERATION
  1214.    STA ERRNO
  1215.    SEC
  1216.    RTS
  1217.    
  1218. ACE├MD╧PEN = *
  1219.    JSR GET─ISK─EVICE
  1220.    BCC +
  1221.    RTS
  1222. +  STA OPEN─EVICE
  1223.    JSR GET╠F┴ND╞CB
  1224.    BCC +
  1225.    RTS
  1226. +  STA LFTABLE,X
  1227.    STX OPEN╞CB
  1228.    LDA OPEN─EVICE
  1229.    STA DEVTABLE,X
  1230.    LDA #0
  1231.    STA EOFTABLE,X
  1232.    LDA #15
  1233.    STA SATABLE,X
  1234.    STX OPEN╞CB
  1235.    LDA #0
  1236.    STA STRING┬UFFER
  1237.    LDA #FALSE
  1238.    STA CHECK╙TAT
  1239.    LDX #0
  1240.    JSR OPEN╟OT╬AME
  1241.    BCC +
  1242.    RTS
  1243. +  LDA ST
  1244.    AND #$80
  1245.    BEQ +
  1246.    LDA #ACE┼RR─EVICE╬OT╨RESENT
  1247.    STA ERRNO
  1248.    SEC
  1249.    RTS
  1250. +  LDA OPEN╞CB
  1251.    RTS
  1252.  
  1253. ;*** CMDCLOSE( .┴=FCB )
  1254.  
  1255. ACE├MD├LOSE = *
  1256.    TAX
  1257.    LDA LFTABLE,X
  1258.    PHA
  1259.    LDA #LFNULL
  1260.    STA LFTABLE,X
  1261.    PLA
  1262.    SEC
  1263.    JMP KERNEL├LOSE
  1264.  
  1265. ;*** CMDSEND( .╪=╞CB, .┴┘=├MD )
  1266.  
  1267. ACE├MD╙END = *
  1268.    STA SYSWORK+0
  1269.    STY SYSWORK+1
  1270.    LDA LFTABLE,X
  1271.    TAX
  1272.    JSR KERNEL├HKOUT
  1273.    BCC +
  1274.    STA ERRNO
  1275.    RTS
  1276. +  LDY #0
  1277. -  LDA (SYSWORK),Y
  1278.    BEQ +
  1279.    JSR KERNEL├HROUT
  1280.    BCS ++
  1281.    INY
  1282.    BNE -
  1283. +  JSR KERNEL├LRCHN
  1284.    CLC
  1285.    RTS
  1286. +  STA ERRNO
  1287.    JSR KERNEL├LRCHN
  1288.    SEC
  1289.    RTS
  1290.  
  1291. ;*** CMDSTATUS( .╪=╞CB, .┴┘=╙TATUS┬UF ) : ╙TATUS┬UF, .┴=STATUS├ODE
  1292.  
  1293. ACE├MD╙TATUS = *
  1294.    STA SYSWORK+0
  1295.    STY SYSWORK+1
  1296.    LDA LFTABLE,X
  1297.    TAX
  1298.    JSR KERNEL├HKIN
  1299.    BCC +
  1300. -  STA ERRNO
  1301.    JSR KERNEL├LRCHN
  1302.    SEC
  1303.    RTS
  1304. +  LDY #0
  1305. -  JSR KERNEL├HRIN
  1306.    BCS --
  1307.    CMP #$0D
  1308.    BEQ +
  1309.    STA (SYSWORK),Y
  1310.    INY
  1311.    JSR KERNEL╥EADST
  1312.    AND #$40
  1313.    BEQ -
  1314. +  LDA #0
  1315.    STA (SYSWORK),Y
  1316.    JSR KERNEL├LRCHN
  1317.    LDY #0
  1318.    LDA (SYSWORK),Y
  1319.    AND #$0F
  1320.    ASL
  1321.    ASL
  1322.    ADC (SYSWORK),Y
  1323.    ASL
  1324.    STA SYSWORK+3
  1325.    INY
  1326.    LDA (SYSWORK),Y
  1327.    AND #$0F
  1328.    ADC SYSWORK+3
  1329.    CLC
  1330.    RTS
  1331.  
  1332. DEV╘ABLE╔NIT = *
  1333.    LDX #0
  1334.    LDA #ACE═EM╬ULL
  1335. -  STA DEVICE╘ABLE,X
  1336.    INX
  1337.    BNE -
  1338.    RTS
  1339.  
  1340. .SEQ ACECALL.S
  1341. .SEQ ACEMEM.S
  1342. .SEQ ACECON.S
  1343. .SEQ ACERD.S
  1344. .SEQ ACEPAR.S
  1345.  
  1346. ;*** SCREEN CALLS
  1347.  
  1348. TEXT═ODE .BUF 1
  1349.  
  1350. .IF COMPUTER-64
  1351.    .SEQ ACEVDC.S
  1352.    .SEQ ACEVIC.S
  1353. .ELSE
  1354.    .SEQ ACEVIC80.S
  1355.    .SEQ ACEVIC.S
  1356. .IFE
  1357.  
  1358. SCREEN╔NIT = *
  1359.    LDA #0
  1360.    STA TEXT═ODE
  1361. .IF COMPUTER-64
  1362.    JSR VDC╔NIT
  1363.    JSR VIC╔NIT
  1364.    LDX #80
  1365.    BIT $D7
  1366.    BMI +
  1367.    LDX #40
  1368. +  LDA #0
  1369.    JSR CONSCREEN
  1370. .ELSE
  1371.    JSR VDC╙TARTUP
  1372.    JSR VIC╔NIT
  1373.    LDX #40
  1374.    BIT CONFIG┬UF+$C0
  1375.    BVC +
  1376.    LDX #80
  1377. +  LDA #0
  1378.    JSR CONSCREEN
  1379. .IFE
  1380.    RTS
  1381.  
  1382. ACE╫INMAX = *
  1383.    BIT TEXT═ODE
  1384.    BMI +
  1385.    JMP VIC╫INMAX
  1386. +  JMP VDC╫INMAX
  1387. ACE╫INCLS = *
  1388.    BIT TEXT═ODE
  1389.    BMI +
  1390.    JMP VIC╫INCLS
  1391. +  JMP VDC╫INCLS
  1392. ACE╫INSET = *
  1393.    BIT TEXT═ODE
  1394.    BMI +
  1395.    JMP VIC╫INSET
  1396. +  JMP VDC╫INSET
  1397. ACE╫INSIZE = *
  1398.    BIT TEXT═ODE
  1399.    BMI +
  1400.    JMP VIC╫INSIZE
  1401. +  JMP VDC╫INSIZE
  1402. ACE╫INPUT = *
  1403.    BIT TEXT═ODE
  1404.    BMI +
  1405.    JMP VIC╫INPUT
  1406. +  JMP VDC╫INPUT
  1407. ACE╫INCOLOR = *
  1408.    BIT TEXT═ODE
  1409.    BMI +
  1410.    JMP VIC╫INCOLOR
  1411. +  JMP VDC╫INCOLOR
  1412. ACE╫INPOS = *
  1413.    BIT TEXT═ODE
  1414.    BMI +
  1415.    JMP VIC╫INPOS
  1416. +  JMP VDC╫INPOS
  1417. ACE╫INCURSOR = *
  1418.    BIT TEXT═ODE
  1419.    BMI +
  1420.    JMP VIC╫INCURSOR
  1421. +  JMP VDC╫INCURSOR
  1422. ACE╫INSCROLL = *
  1423.    BIT TEXT═ODE
  1424.    BMI +
  1425.    JMP VIC╫INSCROLL
  1426. +  JMP VDC╫INSCROLL
  1427.  
  1428. ;*** MAIN()
  1429.  
  1430. BOOT─EVICE .BUF 1
  1431. TITLE╨TR   .BUF 2
  1432. TITLE╠EN   .BUF 2
  1433. EXIT├LS    .BYTE 0
  1434.  
  1435. MAIN = *
  1436.    LDA 186
  1437.    STA BOOT─EVICE
  1438.    LDA #147
  1439.    JSR KERNEL├HROUT
  1440.    LDA #14
  1441.    JSR KERNEL├HROUT
  1442.    LDX #0
  1443. -  LDA ACE╙TARTUP═SG,X
  1444.    BEQ +
  1445.    JSR KERNEL├HROUT
  1446.    INX
  1447.    BNE -
  1448. +  SEI
  1449.    JSR ACE┬OOTSTRAP
  1450.    JSR ACE╔RQ╔NIT
  1451.    JSR INIT═EMORY
  1452.    JSR ACE├ONFIG
  1453.    BCC +
  1454.    JMP MAIN┼XIT
  1455. +  LDA 2
  1456.    LDY 3
  1457.    STA TITLE╨TR+0
  1458.    STY TITLE╨TR+1
  1459.    LDA 4
  1460.    LDY 5
  1461.    STA TITLE╠EN+0
  1462.    STY TITLE╠EN+1
  1463.    JSR ACE╙TARTUP
  1464.    JSR INIT═EMORY┴LLOC
  1465.    SEI
  1466.    JSR SCREEN╔NIT
  1467.    JSR CON╔NIT
  1468.    JSR DEV╘ABLE╔NIT
  1469.    JSR RD╔NIT
  1470.    JSR PAR╔NIT
  1471.    LDA #%00000001
  1472.    STA VIC+$1A
  1473.    CLI
  1474.    LDA #$FF
  1475.    STA EXIT├LS
  1476.  
  1477.    ;** OPEN STD FILES
  1478.    LDA #<CONFIG┬UF+$90
  1479.    LDY #>CONFIG┬UF+$91
  1480.    STA ZP+0
  1481.    STY ZP+1
  1482.    JSR CHDIR
  1483.    LDA #<STDIN╬AME
  1484.    LDY #>STDIN╬AME
  1485.    STA ZP+0
  1486.    STY ZP+1
  1487.    LDA #"R"
  1488.    JSR OPEN  ;FCB=0
  1489.    LDA #<STDOUT╬AME
  1490.    LDY #>STDOUT╬AME
  1491.    STA ZP
  1492.    STY ZP+1
  1493.    LDA #"W"
  1494.    JSR OPEN   ;FCB=1
  1495.    LDA #"W"
  1496.    JSR OPEN   ;FCB=2
  1497.    LDA TITLE╨TR+0
  1498.    LDY TITLE╨TR+1
  1499.    STA ZP+0
  1500.    STY ZP+1
  1501.    LDA TITLE╠EN+0
  1502.    LDY TITLE╠EN+1
  1503.    LDX #STDOUT
  1504.    JSR WRITE
  1505.    CLI
  1506.  
  1507.    ;** CALL SHELL
  1508.    LDA ACE═EM╘OP+0
  1509.    LDY ACE═EM╘OP+1
  1510.    SEC
  1511.    SBC #7
  1512.    BCS +
  1513.    DEY
  1514. +  STA ZW+0
  1515.    STY ZW+1
  1516.    LDY #6
  1517. -  LDA STARTUP┴RGS,Y 
  1518.    STA (ZW),Y
  1519.    DEY
  1520.    BPL -
  1521.    LDY #0
  1522.    CLC
  1523.    LDA ZW+0
  1524.    ADC #4
  1525.    STA (ZW),Y
  1526.    INY
  1527.    LDA ZW+1
  1528.    ADC #0
  1529.    STA (ZW),Y
  1530.    LDA #<ACE╙HELL┴DDRESS
  1531.    LDY #>ACE╙HELL┴DDRESS
  1532.    STA ZP+0
  1533.    STY ZP+1
  1534.    LDA #1
  1535.    LDY #0
  1536.    JSR EXECSUB
  1537.  
  1538.    ;** EXIT
  1539.    MAIN┼XIT = *
  1540.    LDA #STDIN
  1541.    JSR CLOSE
  1542.    LDA #STDOUT
  1543.    JSR CLOSE
  1544.    LDA #STDERR
  1545.    JSR CLOSE
  1546.    LDA BOOT─EVICE
  1547.    STA 186
  1548.    JSR SHUTDOWN═EMORY
  1549.    BIT EXIT├LS
  1550.    BPL +
  1551.    LDA #147
  1552.    JSR KERNEL├HROUT
  1553. +  JMP ACE╙HUTDOWN┬ASIC
  1554.  
  1555. STDOUT╬AME .ASC "S:"
  1556.            .BYTE 0
  1557. STDIN╬AME  .ASC "K:"
  1558.            .BYTE 0
  1559.  
  1560. STARTUP┴RGS .BYTE 0,0,0,0,"S","H",0
  1561.    
  1562. ACE╙TARTUP═SG = *
  1563. .IF COMPUTER-64
  1564.    .ASC "┴├┼-128 "
  1565. .ELSE
  1566.    .ASC "┴├┼-64  "
  1567. .IFE
  1568.    .ASC "╦ERNEL 0.77.00 - ├╙┬ 22-╧CT-94"
  1569.    .BYTE CHR├╥,CHR├╥,0
  1570.  
  1571. ;*** BSS: C128=1536 BYTES, C64=512 BYTES
  1572.  
  1573. ACE┬SS = *
  1574. .IF COMPUTER-64
  1575.    CHARSET4BIT  = ACE┬SS+0  ;(0 BYTES)
  1576.    STRING┬UFFER = ACE┬SS+0
  1577.    RAM0╞REE═AP  = STRING┬UFFER+256
  1578.    FREEMAP      = RAM0╞REE═AP+256
  1579.    DEVICE╘ABLE  = FREEMAP+256
  1580.    BASIC┌P╙AVE  = DEVICE╘ABLE+256
  1581.    WORKBUF      = BASIC┌P╙AVE+256
  1582.    ACE┬SS┼ND    = WORKBUF+256
  1583. .ELSE
  1584.    DEVICE╘ABLE  = ACE┬SS+0
  1585.    BASIC┌P╙AVE  = DEVICE╘ABLE+256
  1586.    ACE┬SS┼ND    = BASIC┌P╙AVE+256
  1587. .IFE
  1588.