home *** CD-ROM | disk | FTP | other *** search
/ ftp.elysium.pl / ftp.elysium.pl.tar / ftp.elysium.pl / docs / hardware / 64hdproj.sfx / c64sat.src < prev    next >
Text File  |  1990-02-12  |  4KB  |  172 lines

  1. ;BPUT"SAT.SRC
  2. ;RPUT"SAT.SRC
  3. ;
  4. ;+++++++++++++++++++++++++++++++++
  5. ;+  ALLOCATE AND DE-ALLOCATE     +
  6. ;+  A SECTOR IN THE SECTOR       +
  7. ;+  ALLOCATION TABLE.            +
  8. ;+                               +
  9. ;+ INPUT FOR DE-ALLOCATE:        +
  10. ;+    SECTOR NUMBER TO FREE.     +
  11. ;+                               +
  12. ;+ OUTPUT FOR DE-ALLOCATE:       +
  13. ;+    SATBIT IS SET ON.          +
  14. ;+                               +
  15. ;+ INPUT FOR ALLOCATE: NONE      +
  16. ;+                               +
  17. ;+ OUTPUT FOR ALLOCATE:          +
  18. ;+    SATBIT TURNED OFF, AND     +
  19. ;+    SECTOR NUMBER OF THE       +
  20. ;+    NEWLY ALLOCATED SECTOR.    +
  21. ;+++++++++++++++++++++++++++++++++
  22. ;
  23. SATSECPTR = $FB ;AND FC
  24. ;
  25. ALLOCATESAT LDA FREESATSECTOR
  26.  CMP CURRENTSAT ;IS IT SAME AS SAT IN BUFFER?
  27.  BEQ ALLOCATESAT1
  28. ALLOCATEREAD JSR READSATSECTOR ;GO GET THE SECTOR
  29.  BCC ALLOCATESAT1
  30.  RTS ;RETURN WITH ERROR
  31. ALLOCATESAT1 JSR SETSATPTRS
  32.  LDX #0 ;SET COUNTER
  33.  LDY #0 ;INDEX POINTER
  34. ALLOCATESAT2 LDA (SATSECPTR),Y ;ANY FREE?
  35.  BNE ALLOCATESAT3 ;GO IF SO
  36.  INY
  37.  BNE ALLOCATESAT2
  38.  INX
  39.  CPX #2 ;GOT EM ALL?
  40.  BEQ ALLOCATESAT2A
  41.  INC SATSECPTR+1 ;BUMP PAGE
  42.  BNE ALLOCATESAT2
  43. ALLOCATESAT2A = *
  44.  INC FREESATSECTOR ;BUMP
  45.  JSR DEFSET ;GET X PTR TO TABLE
  46.  LDA FREESATSECTOR ;GET NUMBER
  47.  CMP PTFDIR,X ;WAS THERE NO ROOM?
  48.  BNE ALLOCATEREAD
  49.  SEC ;RETURN WITH CARRY FOR NO ROOM
  50.  RTS
  51. ALLOCATESAT3 STY SATBYT ;SAVE OFFSET
  52.  STX SATBYT+1
  53.  LDX #$80 ;SET BIT POINTER
  54.  STX SATBIT
  55. ALLOCATESAT4 ASL A ;SHIFT A BIT
  56.  BCS ALLOCATESAT5
  57.  LSR SATBIT
  58.  BNE ALLOCATESAT4
  59. ALLOCATESAT5 JSR DEFSET ;GET DRIVE PTR
  60.  LDA CURRENTSAT
  61.  STA SATSEC ;SAVE THE SECTOR NUMBER
  62.  LDA (SATSECPTR),Y ;TURN OFF BIT
  63.  EOR SATBIT
  64.  STA (SATSECPTR),Y ;TO ALLOCATE
  65.  LDA #1 ;SET SATBUFFER NEEDS TO BE
  66.  STA SATBUFFERFLAG ;WRITTEN
  67.  CLC
  68.  RTS ;RETURN TO CALLER WITH SUCCESS
  69. ;
  70. ;++ DE-ALLOCATE A SECTOR BY TURNING
  71. ;++ ON THE BIT IN THE SAT SECTOR.
  72. ;
  73. DEALLOCATESATS TAY ;SETUP FOR CONVERSION
  74.  LDA #0
  75.  TAX
  76.  JSR SECTOR2SAT ;TO SAT FORMAT
  77.  JMP DEALLOCATESAT
  78. ;++ THE FOLLOWING REQUIRES THAT
  79. ;++ SATSEC, SATBYT, AND SATBIT BE
  80. ;++ PRIMED.
  81. ALLOCABSOLUTES TAY ;SET UP FOR CONVERSION
  82.  LDA #0
  83.  TAX
  84.  JSR SECTOR2SAT
  85. ALLOCABSOLUTE LDA SATBIT ;INVERT
  86.  EOR #$FF ;THE BITS
  87.  STA SATBIT
  88.  LDA #255 ;SET ABSOLUTE ALLOC FLAG
  89.  .BYT $2C ;BIT
  90. DEALLOCATESAT LDA #0
  91.  STA ALLOCDEALLOCFL
  92.  LDA SATSEC ;SEE IF IN MEMORY
  93.  CMP CURRENTSAT
  94.  BEQ DEALLOCATESAT1
  95.  JSR READSATSECTOR
  96.  BCC DEALLOCATESAT1
  97.  RTS ;RETURN IF ERROR
  98. DEALLOCATESAT1 JSR SETSATPTRS ;ADDRRESS BUFFER
  99.  LDA #>SATBUFFER
  100.  CLC
  101.  ADC SATBYT
  102.  STA SATSECPTR+1
  103.  LDY SATBYT+1 ;GET REST OF OFFSET
  104.  LDA (SATSECPTR),Y
  105.  LDX ALLOCDEALLOCFL ;CHECK TYPE
  106.  BMI ALLOCABSOL
  107.  ORA SATBIT
  108.  JMP ALLOCDEALLOCSV
  109. ALLOCABSOL AND SATBIT
  110. ALLOCDEALLOCSV = *
  111.  STA (SATSECPTR),Y
  112.  LDA #1 ;SET NEED WRITE FLAG
  113.  STA SATBUFFERFLAG
  114.  CLC ;INDICATE SUCCESS
  115.  RTS ;RETURN TO CALLER
  116. ;
  117. READSATSECTOR = * ;READ SAT SECTOR
  118.  PHA
  119.  LDX SATBUFFERFLAG ;BUFFER NEED TO BE WRITTEN?
  120.  BEQ READSATSECTOR1 ;ON IF NOT
  121.  LDA CURRENTSAT ;GET SECTOR TO SAVE
  122.  JSR WRITESATSECTOR ;WRITE IT OUT
  123.  BCC READSATSECTOR1
  124.  PLA
  125.  RTS ;RETURN WITH CARRY FOR ERROR
  126. READSATSECTOR1 PLA ;GET SAVED SECTOR
  127.  STA CURRENTSAT ;MAKE IT CURRENT
  128.  JSR SATSETUPDCB
  129.  JSR READ
  130.  RTS
  131. SATSETUPDCB PHA ;SAVE FOR A JIFFY
  132.  JSR DEFSET ;GET TABLE OFFSET
  133.  PLA
  134.  CLC ;ADD OFFSET
  135.  ADC PTFSAT,X ;SECTOR NUMBER
  136.  STA SECNUM+2
  137.  LDA #0
  138.  STA SECNUM
  139.  STA SECNUM+1
  140.  JSR SEC2CYLDCB ;CONVERT TO DCB FORMAT
  141.  JSR DEFSET
  142.  TXA
  143.  ORA HEAD ;GET DRIVE AND HEAD
  144.  STA HDNUM
  145.  LDA CYLMSB
  146.  STA SECADR
  147.  LDA CYLLSB
  148.  STA CYLNUM
  149.  LDA #1 ;ENSURE ONLY ONE SECTOR
  150.  STA BLKCNT
  151.  LDA #<SATBUFFER
  152.  STA BUFADR
  153.  LDA #>SATBUFFER
  154.  STA BUFADR+1
  155.  RTS
  156. WRITESATSECTOR JSR SATSETUPDCB
  157.  JSR WRITE
  158.  BCC WRITESATSECTOX
  159.  LDA #0
  160.  STA SATBUFFERFLAG
  161.  SEC
  162. WRITESATSECTOX RTS ;RETURN
  163. FREESATSECTOR .BYT 0 ;FIRST SAT WITH ROOM
  164. SETSATPTRS LDA #<SATBUFFER
  165.  STA SATSECPTR
  166.  LDA #>SATBUFFER
  167.  STA SATSECPTR+1
  168.  RTS
  169. SATBUFFERFLAG .BYT 0 ;SECTOR CHANGED FLAG
  170. CURRENTSAT .BYT 0 ;SAT IN BUFFER
  171. ALLOCDEALLOCFL .BYT 0 ;FLAG
  172. .END SAT.SRC