home *** CD-ROM | disk | FTP | other *** search
/ Brotikasten / BROTCD01.iso / c128 / c154.d64 / lrr.s < prev    next >
Text File  |  1995-08-09  |  12KB  |  718 lines

  1. ;╠ITTLE ╥ED ╥EADER ═╙-─╧╙ FILE COPIER PROGRAM
  2. ;WRITTEN 92/10/03 BY ├RAIG ┬RUCE FOR ├= ╚ACKING ╬ET ═AGAZINE
  3.  
  4. .ORG $8000
  5. .OBJ "@:LRR.BIN"
  6.  
  7. ;====JUMP TABLE AND PARAMETERS INTERFACE ====
  8.  
  9. JMP INIT╨ACKAGE
  10. JMP LOAD─IRECTORY
  11. JMP COPY╞ILE
  12.  
  13. .BYTE $CB,131   ;IDENTIFICATION
  14. .BYTE 0,0,0,0
  15.  
  16. ERRNO           .BUF 1    ;(LOCATION PK+15)
  17. SOURCE─EVICE    .BUF 1
  18. SOURCE╘YPE      .BUF 1    ;$00=1571, $FF=1581
  19. START├LUSTER    .BUF 2
  20. LEN═╠           .BUF 2    ;LENGTH MEDIUM AND LOW BYTES
  21.  
  22. ;====GLOBAL DECLARAIONS====
  23.  
  24. KERNEL╠ISTEN = $FFB1
  25. KERNEL╙ECOND = $FF93
  26. KERNEL╒NLSN  = $FFAE
  27. KERNEL┴CPTR  = $FFA2
  28. KERNEL├IOUT  = $FFA8
  29. KERNEL╙PINP  = $FF47
  30. KERNEL├HKOUT = $FFC9
  31. KERNEL├LRCHN = $FFCC
  32. KERNEL├HROUT = $FFD2
  33.  
  34. ST = $D0
  35. CIA├LOCK = $DD00
  36. CIA╞LAGS = $DC0D
  37. CIA─ATA  = $DC0C
  38.  
  39. CLUSTER┬LOCK├OUNT .BUF 1        ;1 OR 2
  40. FAT┬LOCKS         .BUF 1        ;UP TO 3
  41. ROOT─IR┬LOCKS     .BUF 1        ;UP TO 8
  42. ROOT─IR┼NTRIES    .BUF 1        ;UP TO 128
  43. TOTAL╙ECTORS      .BUF 2        ;UP TO 1440
  44. FIRST╞ILE┬LOCK    .BUF 1
  45. FIRST╥OOT─IR┬LOCK .BUF 1
  46. FILE├LUSTER├OUNT  .BUF 2
  47.  
  48. BUF├YLINDER     .BUF 1
  49. BUF╙IDE         .BUF 1
  50. FORMAT╨ARMS     .BUF 6
  51.  
  52. ;====HARDWARE LEVEL====
  53.  
  54. SEND╒0 = *  ;( .┴=BURST├OMMAND├ODE ) : .├╙=ERR
  55.    PHA
  56.    LDA #0
  57.    STA ST
  58.    LDA SOURCE─EVICE
  59.    JSR KERNEL╠ISTEN
  60.    LDA #$6F
  61.    JSR KERNEL╙ECOND
  62.    LDA #"U"
  63.    JSR KERNEL├IOUT
  64.    BIT ST
  65.    BMI SEND╒0┼RROR
  66.    LDA #"0"
  67.    JSR KERNEL├IOUT
  68.    PLA
  69.    JSR KERNEL├IOUT
  70.    BIT ST
  71.    BMI SEND╒0┼RROR
  72.    CLC
  73.    RTS
  74.  
  75.    SEND╒0┼RROR = *
  76.    LDA #5
  77.    STA ERRNO
  78.    SEC
  79.    RTS
  80.  
  81. TOGGLE├LOCK = *
  82.    LDA CIA├LOCK
  83.    EOR #$10
  84.    STA CIA├LOCK
  85.    RTS
  86.  
  87. SERIAL╫AIT = *
  88.    LDA #$08
  89. -  BIT CIA╞LAGS
  90.    BEQ -
  91.    RTS
  92.  
  93. GET┬URST┬YTE = *
  94.    JSR SERIAL╫AIT
  95.    LDX CIA─ATA
  96.    JSR TOGGLE├LOCK
  97.    TXA
  98.    RTS
  99.  
  100. MOUNT─ISK = *  ;() : .├╙=ERR
  101.    LDA #%00011010
  102.    JSR SEND╒0
  103.    BCC +
  104.    RTS
  105. +  JSR KERNEL╒NLSN
  106.    BIT ST
  107.    BMI SEND╒0┼RROR
  108.    CLC
  109.    JSR KERNEL╙PINP
  110.    BIT CIA╞LAGS
  111.    JSR TOGGLE├LOCK
  112.    JSR GET┬URST┬YTE
  113.    STA ERRNO
  114.    AND #$0F
  115.    CMP #2
  116.    BCS MOUNT┼XIT
  117.    LDY #0
  118. -  JSR GET┬URST┬YTE
  119.    STA FORMAT╨ARMS,Y
  120.    INY
  121.    CPY #6
  122.    BCC -
  123.    CLC
  124.    ;** SET INTERLEAVE
  125.    LDA #%00001000
  126.    JSR SEND╒0
  127.    BCC +
  128.    RTS
  129. +  LDA #1            ;INTERLEAVE OF 1 FOR 1581
  130.    BIT SOURCE╘YPE
  131.    BMI +
  132.    LDA #4            ;INTERLEAVE OF 4 FOR 1571
  133. +  JSR KERNEL├IOUT
  134.    JSR KERNEL╒NLSN
  135.    MOUNT┼XIT = *
  136.    RTS
  137.  
  138. BUFPTR = 2
  139. SECNUM = 4
  140.  
  141. READ╘RACK = *  ;( .┴=CYLINDER, .╪=SIDE ) : TRACKBUF, .├╙=ERR
  142.    PHA
  143.    TXA
  144.    AND #$01
  145.    ASL
  146.    ASL
  147.    ASL
  148.    ASL
  149.    BIT SOURCE╘YPE
  150.    BPL +
  151.    EOR #$10
  152. +  JSR SEND╒0
  153.    BCC +
  154.    RTS
  155. +  PLA                  ;CYLINDER NUMBER
  156.    JSR KERNEL├IOUT
  157.    LDA #1               ;START SECTOR NUMBER
  158.    JSR KERNEL├IOUT
  159.    LDA #9               ;SECTOR COUNT
  160.    JSR KERNEL├IOUT
  161.    JSR KERNEL╒NLSN
  162.    SEI
  163.    CLC
  164.    JSR KERNEL╙PINP
  165.    BIT CIA╞LAGS
  166.    JSR TOGGLE├LOCK
  167.    LDA #<TRACKBUF
  168.    LDY #>TRACKBUF
  169.    STA BUFPTR
  170.    STY BUFPTR+1
  171.    LDA #0
  172.    STA SECNUM
  173. -  BIT SOURCE╘YPE
  174.    BMI +
  175.    JSR GET1571┬UF╨TR
  176. +  JSR READ╙ECTOR
  177.    BCS TRACK┼XIT
  178.    INC SECNUM
  179.    LDA SECNUM
  180.    CMP #9
  181.    BCC -
  182.    CLC
  183.    TRACK┼XIT = *
  184.    CLI
  185.    RTS
  186.  
  187. GET1571┬UF╨TR = *
  188.    LDA #<TRACKBUF
  189.    STA BUFPTR
  190.    LDX SECNUM
  191.    CLC
  192.    LDA #>TRACKBUF
  193.    ADC BUFPTR1571,X
  194.    STA BUFPTR+1
  195.    RTS
  196.  
  197. BUFPTR1571 = *
  198.    .BYTE 0,8,16,6,14,4,12,2,10
  199.  
  200. READ╙ECTOR = *  ;( BUFPTR ) : .├╙=ERR
  201.    JSR GET┬URST┬YTE
  202.    STA ERRNO
  203.    AND #$0F
  204.    CMP #2
  205.    BCC +
  206.    RTS
  207. +  LDX #2
  208.    LDY #0
  209.  
  210.    READ┬YTE = *
  211.    LDA #$08
  212. -  BIT CIA╞LAGS
  213.    BEQ -
  214.    LDA CIA├LOCK
  215.    EOR #$10
  216.    STA CIA├LOCK
  217.    LDA CIA─ATA
  218.    STA (BUFPTR),Y
  219.    INY
  220.    BNE READ┬YTE
  221.    INC BUFPTR+1
  222.    DEX
  223.    BNE READ┬YTE
  224.    RTS
  225.  
  226. ;====LOGICAL SECTOR LEVEL====
  227.  
  228. INIT╨ACKAGE = *
  229.    LDA #$0E
  230.    STA $FF00
  231.    LDA #$FF
  232.    STA BUF├YLINDER
  233.    STA BUF╙IDE
  234.    CLC
  235.    RTS
  236.  
  237. SECTOR╙AVE = 5
  238.  
  239. READ┬LOCK = *  ;( .┴=CYLINDER,.╪=SIDE,.┘=SECTOR ) : .┴┘=BLK╨TR,.├╙=ERR
  240.    CMP BUF├YLINDER
  241.    BNE READ┬LOCK╨HYSICAL
  242.    CPX BUF╙IDE
  243.    BNE READ┬LOCK╨HYSICAL
  244.    DEY
  245.    TYA
  246.    ASL
  247.    CLC
  248.    ADC #>TRACKBUF
  249.    TAY
  250.    LDA #<TRACKBUF
  251.    CLC
  252.    RTS
  253.  
  254.    READ┬LOCK╨HYSICAL = *
  255.    STA BUF├YLINDER
  256.    STX BUF╙IDE
  257.    STY SECTOR╙AVE
  258.    JSR READ╘RACK
  259.    BCC READ┬LOCK╨HYSICAL╧K
  260.    LDA ERRNO
  261.    AND #$0F
  262.    CMP #11    ;DISK CHANGE
  263.    BEQ +
  264.    SEC
  265.    RTS
  266. +  JSR MOUNT─ISK
  267.    LDA BUF├YLINDER
  268.    LDX BUF╙IDE
  269.    LDY SECTOR╙AVE
  270.    BCC READ┬LOCK╨HYSICAL
  271.    RTS
  272.  
  273.    READ┬LOCK╨HYSICAL╧K = *
  274.    LDA BUF├YLINDER
  275.    LDX BUF╙IDE
  276.    LDY SECTOR╙AVE
  277.    JMP READ┬LOCK
  278.  
  279. DIVIDE┬Y18 = *  ;( .┴┘=NUMBER ) : .┴=QUOTIENT, .┘=REMAINDER
  280.    ;** COULD REPEATEDLY SUBTRACT 360 HERE
  281.    LDX #$FF
  282. -  INX
  283.    SEC
  284.    SBC #18
  285.    BCS -
  286.    DEY
  287.    BPL -
  288.    CLC
  289.    ADC #18
  290.    INY
  291.    TAY
  292.    TXA
  293.    RTS
  294.  
  295. CONVERT╠OGICAL┬LOCK╬UM = *  ;( .┴┘=BLOCK╬UM ) : .┴=CYL, .╪=SIDE, .┘=SEC
  296.    JSR DIVIDE┬Y18
  297.    LDX #0
  298.    CPY #9
  299.    BCC +
  300.    PHA
  301.    TYA
  302.    SBC #9
  303.    TAY
  304.    PLA
  305.    LDX #1
  306. +  INY
  307.    RTS
  308.  
  309. DEST╨TR = 6
  310. CUR├YLINDER = 8
  311. CUR╙IDE = 9
  312. CUR╙ECTOR = 10
  313. BLOCK├OUNTDOWN = 11
  314. SOURCE╨TR = 12
  315.  
  316. COPY┬LOCKS = *  ;( .┴┘=START┬LOCK, .╪=BLOCK├OUNT, ($6)=DEST ) : .├╙=ERR
  317.    STX BLOCK├OUNTDOWN
  318.    JSR CONVERT╠OGICAL┬LOCK╬UM
  319.    STA CUR├YLINDER
  320.    STX CUR╙IDE
  321.    STY CUR╙ECTOR
  322.  
  323.    COPY┬LOCK╠OOP = *
  324.    LDA CUR├YLINDER
  325.    LDX CUR╙IDE
  326.    LDY CUR╙ECTOR
  327.    JSR READ┬LOCK
  328.    BCC +
  329.    RTS
  330. +  STA SOURCE╨TR
  331.    STY SOURCE╨TR+1
  332.    LDX #2
  333.    LDY #0
  334. -  LDA (SOURCE╨TR),Y
  335.    STA (DEST╨TR),Y
  336.    INY
  337.    LDA (SOURCE╨TR),Y
  338.    STA (DEST╨TR),Y
  339.    INY
  340.    BNE -
  341.    INC SOURCE╨TR+1
  342.    INC DEST╨TR+1
  343.    DEX
  344.    BNE -
  345.    INC CUR╙ECTOR
  346.    LDA CUR╙ECTOR
  347.    CMP #10
  348.    BCC +
  349.    LDA #1
  350.    STA CUR╙ECTOR
  351.    INC CUR╙IDE
  352.    LDA CUR╙IDE
  353.    CMP #2
  354.    BCC +
  355.    LDA #0
  356.    STA CUR╙IDE
  357.    INC CUR├YLINDER
  358. +  DEC BLOCK├OUNTDOWN
  359.    BNE COPY┬LOCK╠OOP
  360.    CLC
  361.    RTS
  362.  
  363. READ├LUSTER = *  ;( .┴┘=CLUSTER╬UMBER ) : CLUSTER┬UF, .├╙=ERR
  364.    ;** CONVERT CLUSTER NUMBER TO LOGICAL BLOCK NUMBER
  365.    SEC
  366.    SBC #2
  367.    BCS +
  368.    DEY
  369. +  LDX CLUSTER┬LOCK├OUNT
  370.    CPX #1
  371.    BEQ +
  372.    ASL
  373.    STY 7
  374.    ROL 7
  375.    LDY 7
  376. +  CLC
  377.    ADC FIRST╞ILE┬LOCK
  378.    BCC +
  379.    INY
  380.  
  381.    ;** READ LOGICAL BLOCKS COMPRISING CLUSTER
  382. +  LDX #<CLUSTER┬UF
  383.    STX 6
  384.    LDX #>CLUSTER┬UF
  385.    STX 7
  386.    LDX CLUSTER┬LOCK├OUNT
  387.    JMP COPY┬LOCKS
  388.  
  389. ;====═╙-─╧╙ FORMAT LEVEL====
  390.  
  391. BOOT┬LOCK = 2
  392.  
  393. LOAD─IRECTORY = *  ;( ) : .┴┘=DIRBUF, .╪=DIR┼NTRIES, .├╙=ERR
  394.    LDA #$0E
  395.    STA $FF00
  396.  
  397.    ;** GET PARAMETERS FROM BOOT SECTOR
  398.    LDA #0
  399.    LDY #0
  400.    JSR CONVERT╠OGICAL┬LOCK╬UM
  401.    JSR READ┬LOCK
  402.    BCC +
  403.    RTS
  404. +  STA BOOT┬LOCK
  405.    STY BOOT┬LOCK+1
  406.    LDY #13              ;GET CLUSTER SIZE
  407.    LDA (BOOT┬LOCK),Y
  408.    STA CLUSTER┬LOCK├OUNT
  409.    CMP #3
  410.    BCC +
  411.  
  412.    INVALID╨ARMS = *
  413.    LDA #60
  414.    STA ERRNO
  415.    SEC
  416.    RTS
  417.  
  418. +  LDY #16              ;CHECK ╞┴╘ REPLICATION COUNT, MUST BE 2
  419.    LDA (BOOT┬LOCK),Y
  420.    CMP #2
  421.    BNE INVALID╨ARMS
  422.    LDY #22              ;GET ╞┴╘ SIZE IN SECTORS
  423.    LDA (BOOT┬LOCK),Y
  424.    STA FAT┬LOCKS
  425.    CMP #4
  426.    BCS INVALID╨ARMS
  427.    LDY #17              ;GET DIRECTORY SIZE
  428.    LDA (BOOT┬LOCK),Y
  429.    STA ROOT─IR┼NTRIES
  430.    CMP #129
  431.    BCS INVALID╨ARMS
  432.    LSR
  433.    LSR
  434.    LSR
  435.    LSR
  436.    STA ROOT─IR┬LOCKS
  437.    LDY #19              ;GET TOTAL SECTOR COUNT
  438.    LDA (BOOT┬LOCK),Y
  439.    STA TOTAL╙ECTORS
  440.    INY
  441.    LDA (BOOT┬LOCK),Y
  442.    STA TOTAL╙ECTORS+1
  443.    LDY #24              ;CHECK SECTORS PER TRACK, MUST BE 9
  444.    LDA (BOOT┬LOCK),Y
  445.    CMP #9
  446.    BNE INVALID╨ARMS
  447.    LDY #26
  448.    LDA (BOOT┬LOCK),Y
  449.    CMP #2               ;CHECK NUMBER OF SIDES, MUST BE 2
  450.    BNE INVALID╨ARMS
  451.    LDY #14              ;CHECK NUMBER OF BOOT SECTORS, MUST BE 1
  452.    LDA (BOOT┬LOCK),Y
  453.    CMP #1
  454.    BNE INVALID╨ARMS
  455.  
  456.    ;** GET DERIVED PARAMETERS
  457.    LDA FAT┬LOCKS        ;FIRST ROOT DIRECTORY SECTOR
  458.    ASL
  459.    CLC
  460.    ADC #1
  461.    STA FIRST╥OOT─IR┬LOCK
  462.    CLC                  ;FIRST FILE SECTOR
  463.    ADC ROOT─IR┬LOCKS
  464.    STA FIRST╞ILE┬LOCK
  465.    LDA TOTAL╙ECTORS     ;NUMBER OF FILE CLUSTERS
  466.    LDY TOTAL╙ECTORS+1
  467.    SEC
  468.    SBC FIRST╞ILE┬LOCK
  469.    BCS +
  470.    DEY
  471. +  STA FILE├LUSTER├OUNT
  472.    STY FILE├LUSTER├OUNT+1
  473.    LDA CLUSTER┬LOCK├OUNT
  474.    CMP #2
  475.    BNE +
  476.    LSR FILE├LUSTER├OUNT+1
  477.    ROR FILE├LUSTER├OUNT
  478.  
  479.    ;** LOAD ╞┴╘
  480. +  LDA #<FATBUF
  481.    LDY #>FATBUF
  482.    STA 6
  483.    STY 7
  484.    LDA #1
  485.    LDY #0
  486.    LDX FAT┬LOCKS
  487.    JSR COPY┬LOCKS
  488.    BCC +
  489.    RTS
  490.  
  491.    ;** LOAD ACTUAL DIRECTORY
  492. +  LDA #<DIRBUF
  493.    LDY #>DIRBUF
  494.    STA 6
  495.    STY 7
  496.    LDA FIRST╥OOT─IR┬LOCK
  497.    LDY #0
  498.    LDX ROOT─IR┬LOCKS
  499.    JSR COPY┬LOCKS
  500.    BCC +
  501.    RTS
  502. +  LDA #<DIRBUF
  503.    LDY #>DIRBUF
  504.    LDX ROOT─IR┼NTRIES
  505.    CLC
  506.    RTS
  507.  
  508. ENTRY┴DDR = 2
  509. ENTRY╫ORK = 4
  510. ENTRY┬ITS = 5
  511.