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