home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / eric.hdv / OBJSRC / AUXQUEUE.SRC.txt next >
Text File  |  2020-08-13  |  8KB  |  252 lines

  1. ; ********************************************
  2. ; * AUXQUEUE.SRC - AUX MEMORY QUEUE MANAGER
  3. ; * (C) 1993, ERIC RANGELL
  4. ; ********************************************
  5. ;
  6. RECEIVER EQU $FA
  7. MSG      EQU $FB
  8. MYOBJ    EQU $FD
  9. MYADRS   EQU $FE             ;WILL POINT TO 'BASE' WHEN OBJECT INVOKED
  10. ;
  11. USRVECT  EQU $0A             ;APPLESOFT USR VECTOR
  12. BASL     EQU $0B             
  13. BASH     EQU $0C             
  14. ;
  15. ;
  16. OLDSTRT  EQU $3C             ;START ADRS FOR MOVE
  17. OLDEND   EQU $3E             ;END ADRS FOR MOVE
  18. NEWSTRT  EQU $42             ;DESTINATION FOR MOVE
  19. ;
  20. MOVE     EQU $FE2C           ;MONITOR MOVE ROUTINE
  21. AUXMOVE  EQU $C311
  22. ;
  23. ;------------OBJECTS REFERENCED
  24. AUXQUEUE EQU 8
  25. ;
  26. ;------------OBJECT HEADER (19 BYTES)
  27.         ORG $6000
  28. ;
  29.         LDA #$00  ;CALL OBJECT SETUP ROUTINE
  30.         STA $FA
  31.         JSR $000A
  32.         DFB AUXQUEUE        ;OBJECT NUMBER
  33.         DFB 0,0,0,0,0,0,0   ;SAVE AREA
  34. BASE    CLV
  35.         BVC CODE
  36. RETCODE DFB $00             ;RETURN CODE
  37. ;
  38. ;------------INTERNAL DATA MAINTAINED BY OBJECT
  39. ;
  40. QINSREG  DFB $00
  41. QOUTREG  DFB $00             ;OUTPUT DATA REGISTER
  42. ;
  43. QBEGIN   DFB $00,$08         ;AUX MEM BEGIN OF QUEUE
  44. QEND     DFB $00,$C0         ;AUX MEM END OF QUEUE + 1
  45. QSTAT    DFB $00             ;QUEUE STATUS: 0=EMPTY, FF=FULL, 1=IN USE
  46. QHEAD    DFB $00,$08         ;HEAD POINTER
  47. QTAIL    DFB $00,$08         ;TAIL POINTER
  48. ;
  49. ;==========================================
  50. ; METHODS:
  51. ;        'E' <BYTE> = ENQUE BYTE
  52. ;        'D' <BYTE> = DEQUEUE INTO BYTE
  53. ;
  54. ;==========================================
  55. CODE                LDY #0
  56.                     LDA (MSG),Y
  57.                     CMP #'E'           ;IS IT AN ENQUE?
  58.                     BNE CODED1
  59. ;
  60.                     INY                ;SAVE THE BYTE TO ENQ
  61.                     LDA (MSG),Y
  62.                     LDY #QINSREG-BASE
  63.                     STA (MYADRS),Y
  64. ;                 
  65. ENQUE               LDY   #QSTAT-BASE            ;CHECK STATUS
  66.                     LDA   (MYADRS),Y
  67.                     BPL   DOENQ
  68. ;
  69.                     LDY   #RETCODE-BASE          ;QUEUE FULL - RC=FF
  70.                     LDA   #$FF
  71.                     STA   (MYADRS),Y
  72.                     SEC   
  73.                     RTS   
  74. ;
  75. DOENQ               SEI   
  76.                     LDY   #QHEAD-BASE            ;ADD 1 TO QHEAD
  77.                     LDA   (MYADRS),Y
  78.                     CLC   
  79.                     ADC   #$01
  80.                     STA   (MYADRS),Y
  81.                     LDY   #QHEAD-BASE+1
  82.                     LDA   (MYADRS),Y
  83.                     ADC   #$00
  84.                     STA   (MYADRS),Y
  85. ;
  86.                     LDY   #QEND-BASE+1           ;CHK FOR WRAPAROUND
  87.                     LDA   (MYADRS),Y
  88.                     LDY   #QHEAD-BASE+1
  89.                     CMP   (MYADRS),Y
  90.                     BNE   STORHD
  91.                     LDY   #QEND-BASE
  92.                     LDA   (MYADRS),Y
  93.                     LDY   #QHEAD-BASE
  94.                     CMP   (MYADRS),Y
  95.                     BNE   STORHD
  96. ;
  97.                     LDY   #QBEGIN-BASE           ;WRAPAROUND
  98.                     LDA   (MYADRS),Y
  99.                     LDY   #QHEAD-BASE
  100.                     STA   (MYADRS),Y
  101.                     LDY   #QBEGIN-BASE+1
  102.                     LDA   (MYADRS),Y
  103.                     LDY   #QHEAD-BASE+1
  104.                     STA   (MYADRS),Y
  105. ;
  106.                     CLV
  107.                     BVC   STORHD
  108. CODED1              CLV
  109.                     BVC   CODED
  110. ;
  111. STORHD              LDA   #QINSREG-BASE  ;MOVE 1 BYTE TO AUX
  112.                     CLC
  113.                     ADC   MYADRS       ;ADD OFFSET TO BASE TO GET REAL ADRS
  114.                     STA   OLDSTRT
  115.                     STA   OLDEND
  116.                     LDA   MYADRS+1
  117.                     ADC   #$00
  118.                     STA   OLDSTRT+1
  119.                     STA   OLDEND+1
  120.                     LDY   #QHEAD-BASE
  121.                     LDA   (MYADRS),Y
  122.                     STA   NEWSTRT
  123.                     LDY   #QHEAD-BASE+1
  124.                     LDA   (MYADRS),Y
  125.                     STA   NEWSTRT+1
  126.                     SEC   
  127.                     JSR   AUXMOVE
  128. ;
  129.                     LDA   #$01         ;SET QSTAT = 1 (IN USE)
  130.                     LDY   #QSTAT-BASE
  131.                     STA   (MYADRS),Y
  132. ;
  133.                     LDY   #QHEAD-BASE+1
  134.                     LDA   (MYADRS),Y
  135.                     LDY   #QTAIL-BASE+1
  136.                     CMP   (MYADRS),Y
  137.                     BNE   QNOTFULL
  138.                     LDY   #QHEAD-BASE
  139.                     LDA   (MYADRS),Y
  140.                     LDY   #QTAIL-BASE
  141.                     CMP   (MYADRS),Y
  142.                     BNE   QNOTFULL
  143.                     LDA   #$FF         ;SET QSTAT = FF (FULL)
  144.                     LDY   #QSTAT-BASE
  145.                     STA   (MYADRS),Y
  146. QNOTFULL            CLC   
  147.                     CLI   
  148.                     RTS   
  149. ;
  150. ;--------
  151. CODED               CMP   #'D'
  152.                     BNE   CODEX1
  153. ;
  154. ;
  155. DEQUE               LDY   #QSTAT-BASE
  156.                     LDA   (MYADRS),Y
  157.                     BNE   DODEQ
  158. ;
  159.                     LDY   #RETCODE-BASE
  160.                     LDA   #$FE
  161.                     STA   (MYADRS),Y
  162.                     SEC   
  163.                     RTS   
  164. ;
  165. DODEQ               SEI   
  166.                     LDY   #QTAIL-BASE
  167.                     LDA   (MYADRS),Y
  168.                     CLC   
  169.                     ADC   #$01
  170.                     STA   (MYADRS),Y
  171.                     LDY   #QTAIL-BASE+1
  172.                     LDA   (MYADRS),Y
  173.                     ADC   #$00
  174.                     STA   (MYADRS),Y
  175. ;
  176.                     LDY   #QEND-BASE+1
  177.                     LDA   (MYADRS),Y
  178.                     LDY   #QTAIL-BASE+1
  179.                     CMP   (MYADRS),Y
  180.                     BNE   GETHD
  181.                     LDY   #QEND-BASE
  182.                     LDA   (MYADRS),Y
  183.                     LDY   #QTAIL-BASE
  184.                     CMP   (MYADRS),Y
  185.                     BNE   GETHD
  186. ;
  187.                     LDY   #QBEGIN-BASE
  188.                     LDA   (MYADRS),Y
  189.                     LDY   #QTAIL-BASE
  190.                     STA   (MYADRS),Y
  191.                     LDY   #QBEGIN-BASE+1
  192.                     LDA   (MYADRS),Y
  193.                     LDY   #QTAIL-BASE+1
  194.                     STA   (MYADRS),Y
  195. ;
  196.                     CLV
  197.                     BVC   GETHD
  198. CODEX1              CLV
  199.                     BVC   CODEX
  200. ;
  201. GETHD               LDY   #QTAIL-BASE
  202.                     LDA   (MYADRS),Y
  203.                     STA   OLDSTRT
  204.                     STA   OLDEND
  205.                     LDY   #QTAIL-BASE+1
  206.                     LDA   (MYADRS),Y
  207.                     STA   OLDSTRT+1
  208.                     STA   OLDEND+1
  209. ;
  210.                     LDA   #QOUTREG-BASE
  211.                     CLC
  212.                     ADC   MYADRS
  213.                     STA   NEWSTRT
  214.                     LDA   MYADRS+1
  215.                     ADC   #$00
  216.                     STA   NEWSTRT+1
  217.                     CLC   
  218.                     JSR   AUXMOVE
  219. ;
  220.                     LDA   #$01         ;SET QSTAT=1
  221.                     LDY   #QSTAT-BASE
  222.                     STA   (MYADRS),Y
  223. ;
  224.                     LDY   #QHEAD-BASE+1
  225.                     LDA   (MYADRS),Y
  226.                     LDY   #QTAIL-BASE+1
  227.                     CMP   (MYADRS),Y
  228.                     BNE   QNOTEMTY
  229.                     LDY   #QHEAD-BASE
  230.                     LDA   (MYADRS),Y
  231.                     LDY   #QTAIL-BASE
  232.                     CMP   (MYADRS),Y
  233.                     BNE   QNOTEMTY
  234. ;
  235.                     LDA   #$00         ;SET QSTAT = 0 (EMPTY)
  236.                     LDY   #QSTAT-BASE
  237.                     STA   (MYADRS),Y
  238. ;
  239. QNOTEMTY            LDY   #QOUTREG-BASE
  240.                     LDA   (MYADRS),Y
  241.                     LDY   #1
  242.                     STA   (MSG),Y
  243.                     CLC
  244.                     CLI   
  245.                     RTS   
  246. ;
  247. CODEX               LDY   #RETCODE-BASE
  248.                     LDA   #12
  249.                     STA   (MYADRS),Y
  250.                     SEC   
  251.                     RTS 
  252.