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

  1. ;*** FILE READER PROGRAM
  2.  
  3. .SEQ ACEHEAD.S
  4. .ORG ACE┴PP┴DDRESS
  5. .OBJ "@:READ"
  6.  
  7. JMP CRC═AIN
  8. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  9. .BYTE 64,0  ;** STACK,RESERVED
  10.  
  11. ;*** GLOBAL DECLARATIONS
  12.  
  13. LIBWORK = $40
  14.  
  15. CHR├╥ = $0D
  16. CHR┬┼╠ = $07
  17. CHR╤UOTE = $22
  18.  
  19. ;******** STANDARD LIBRARY ********
  20. PUTS = *
  21.    LDX #STDOUT
  22. FPUTS = *
  23.    STA ZP
  24.    STY ZP+1
  25.    LDY #$FF
  26. -  INY
  27.    LDA (ZP),Y
  28.    BNE -
  29.    TYA
  30.    LDY #0
  31.    JMP WRITE
  32. EPUTS = *
  33.    LDX #STDERR
  34.    JMP FPUTS
  35.  
  36. PUTCHAR = *
  37.    LDX #STDOUT
  38. PUTC = *
  39.    STA PUTC┬UFFER
  40.    LDA #<PUTC┬UFFER
  41.    LDY #>PUTC┬UFFER
  42.    STA ZP
  43.    STY ZP+1
  44.    LDA #1
  45.    LDY #0
  46.    JMP WRITE
  47.    PUTC┬UFFER .BUF 1
  48.  
  49. GETCHAR = *
  50.    LDX #STDIN
  51. GETC = *
  52.    LDA #<GETC┬UFFER
  53.    LDY #>GETC┬UFFER
  54.    STA ZP
  55.    STY ZP+1
  56.    LDA #1
  57.    LDY #0
  58.    JSR READ
  59.    BEQ +
  60.    LDA GETC┬UFFER
  61.    RTS
  62. +  SEC
  63.    RTS
  64.    GETC┬UFFER .BUF 1
  65.  
  66. GETARG = *
  67.    STY ZP+1
  68.    ASL
  69.    STA ZP
  70.    ROL ZP+1
  71.    CLC
  72.    LDA ACE┴RGV
  73.    ADC ZP
  74.    STA ZP
  75.    LDA ACE┴RGV+1
  76.    ADC ZP+1
  77.    STA ZP+1
  78.    LDY #0
  79.    LDA (ZP),Y
  80.    TAX
  81.    INY
  82.    LDA (ZP),Y
  83.    STX ZP
  84.    STA ZP+1
  85.    RTS
  86.  
  87. ITOA┬IN = LIBWORK       ;(4)
  88. ITOA┬CD = LIBWORK+4     ;(5)
  89. ITOA╞LAG = LIBWORK+9    ;(1)
  90. ITOA╬UMBER .BUF 11
  91. ITOA = *  ;( .╪=NUM┌PADDR ) : ITOA╬UMBER
  92.    LDY #0
  93. -  LDA 0,X
  94.    STA ITOA┬IN,Y
  95.    INX
  96.    INY
  97.    CPY #4
  98.    BCC - 
  99.    LDX #5
  100.    LDA #0
  101. -  STA ITOA┬CD,X   ;ZEROS "ITOA╞LAG" TOO
  102.    DEX
  103.    BPL -
  104.    LDY #32
  105.    SEI
  106.    SED
  107.  
  108.    ITOA╬EXT┬IT = *
  109.    ASL ITOA┬IN+0
  110.    ROL ITOA┬IN+1
  111.    ROL ITOA┬IN+2
  112.    ROL ITOA┬IN+3
  113.    LDX #4
  114. -  LDA ITOA┬CD,X
  115.    ADC ITOA┬CD,X
  116.    STA ITOA┬CD,X
  117.    DEX
  118.    BPL -
  119.    DEY
  120.    BNE ITOA╬EXT┬IT
  121.    CLD
  122.    CLI
  123.    LDX #0
  124.    LDY #0
  125. -  LDA ITOA┬CD,X
  126.    JSR ITOA╨UT╚EX
  127.    INX
  128.    CPX #5
  129.    BCC -
  130.    LDA #0
  131.    STA ITOA╬UMBER,Y
  132.    RTS
  133.    
  134.    ITOA╨UT╚EX = *
  135.    PHA
  136.    LSR
  137.    LSR
  138.    LSR
  139.    LSR
  140.    JSR ITOA╨UT─IGIT
  141.    PLA
  142.    AND #$0F
  143.  
  144.    ITOA╨UT─IGIT = *
  145.    CMP ITOA╞LAG
  146.    BNE +
  147.    CPY #7
  148.    BCS +
  149.    LDA #$20
  150.    BNE ITOA╨OKE
  151. +  ORA #$30
  152.    STA ITOA╞LAG
  153.    
  154.    ITOA╨OKE = *
  155.    STA ITOA╬UMBER,Y
  156.    INY
  157.    RTS
  158.  
  159. ;===CRC32===
  160. CRC┴RG = 2
  161. CRC╬AME = 4
  162. IN┬UF╠EN = 6
  163.  
  164. CRC═AIN = *
  165.    ;** CHECK ARGUMENT COUNT
  166.    LDA ACE┴RGC+1
  167.    BNE CRC┼NOUGH┴RGS
  168.    LDA ACE┴RGC
  169.    CMP #2
  170.    BCS CRC┼NOUGH┴RGS
  171.  
  172. CRC╒SAGE = *
  173.    LDA #<CRC╒SAGE═SG
  174.    LDY #>CRC╒SAGE═SG
  175.    JMP EPUTS
  176.  
  177. CRC╒SAGE═SG = *
  178.    .ASC "USAGE: READ FILE1 FILE2 ... FILE╬"
  179.    .BYTE CHR├╥
  180.    .BYTE 0
  181.  
  182. CRC┼NOUGH┴RGS = *
  183.    ;** GET INPUT BUFFER LENGTH
  184.    SEC
  185.    LDA ACE═EM╘OP+0
  186.    SBC #<CRC╔N┬UF
  187.    STA IN┬UF╠EN
  188.    LDA ACE═EM╘OP+1
  189.    SBC #>CRC╔N┬UF
  190.    STA IN┬UF╠EN+1
  191.    ;** MAIN LOOP
  192.    LDA #1
  193.    LDY #0
  194.    STA CRC┴RG
  195.    STY CRC┴RG+1
  196. -  JSR STOPKEY
  197.    BCS CRC╙TOPPED
  198.    LDA CRC┴RG
  199.    LDY CRC┴RG+1
  200.    JSR GETARG
  201.    LDA ZP
  202.    LDY ZP+1
  203.    STA CRC╬AME
  204.    STY CRC╬AME+1
  205.    ORA ZP+1
  206.    BEQ CRC┼XIT
  207.    JSR DO╥EAD
  208.    BCC +
  209.    JSR CRC┼RROR
  210. +  INC CRC┴RG
  211.    BNE +
  212.    INC CRC┴RG+1
  213. +  JMP -
  214.  
  215. CRC┼XIT = *
  216.    RTS
  217.  
  218. CRC╙TOPPED = *
  219.    LDA #<STOPPED═SG
  220.    LDY #>STOPPED═SG
  221.    JSR EPUTS
  222.    RTS
  223.    STOPPED═SG = *
  224.    .ASC "<╙TOPPED>"
  225.    .BYTE CHR├╥,0
  226.  
  227. CRC┼RROR = *
  228.    LDA #<CRC┼RROR═SG1
  229.    LDY #>CRC┼RROR═SG1
  230.    JSR EPUTS
  231.    LDA CRC╬AME
  232.    LDY CRC╬AME+1
  233.    JSR EPUTS
  234.    LDA #<CRC┼RROR═SG2
  235.    LDY #>CRC┼RROR═SG2
  236.    JMP EPUTS
  237.  
  238. CRC┼RROR═SG1 = *
  239.    .ASC "┼RROR READING FILE "
  240.    .BYTE CHR╤UOTE,0
  241.  
  242. CRC┼RROR═SG2 = *
  243.    .BYTE CHR╤UOTE,CHR├╥,0
  244.  
  245. BUF╨TR = 8
  246. BUF├OUNT = 10
  247. INFILE = 12
  248.  
  249. DO╥EAD = *
  250.    ;** OPEN FILE
  251.    LDA CRC╬AME
  252.    LDY CRC╬AME+1
  253.    STA ZP
  254.    STY ZP+1
  255.    LDA #"R"
  256.    JSR OPEN
  257.    BCC +
  258.    RTS
  259. +  STA INFILE
  260.    LDA #<READ╙TART═SG
  261.    LDY #>READ╙TART═SG
  262.    JSR EPUTS
  263.    ;** READ FILE
  264.    JSR READ┬ODY
  265.    ;** CLOSE FILE
  266.    LDA #<READ╞INISH═SG
  267.    LDY #>READ╞INISH═SG
  268.    JSR EPUTS
  269.    LDA INFILE
  270.    JSR CLOSE
  271.    RTS
  272.  
  273. READ╙TART═SG = *
  274.    .ASC "START"
  275.    .BYTE CHR┬┼╠,CHR├╥,0
  276.  
  277. READ╞INISH═SG = *
  278.    .BYTE CHR┬┼╠
  279.    .ASC "FINISHED"
  280.    .BYTE CHR├╥,0
  281.  
  282. READ┬ODY = *
  283.    LDA #<CRC╔N┬UF
  284.    LDY #>CRC╔N┬UF
  285.    STA ZP
  286.    STY ZP+1
  287.    LDA IN┬UF╠EN+0
  288.    LDY IN┬UF╠EN+1
  289.    LDX INFILE
  290.    JSR READ
  291.    BEQ +
  292.    BCS +
  293.    JMP READ┬ODY
  294. +  SEC
  295.    RTS
  296.  
  297. ;===THE END===
  298. CRC┬SS = *
  299. CRC╔N┬UF  = CRC┬SS
  300.