home *** CD-ROM | disk | FTP | other *** search
/ 64'er / 64ER_CD.iso / utilpc / cc64 / cc64.d64 / bl02.asm next >
Assembly Source File  |  1994-09-25  |  4KB  |  252 lines

  1.  
  2. ; CC64 RUNTIME MODULE
  3. ; TO RUN IN C64 AT $0801-$A000
  4.  
  5. ; PHILIP ZEMBROD, 10.5.94
  6. ; LAST CHANGE :   10.5.94
  7.  
  8. ZP      = $FB
  9. BASE    = $FD
  10. ZP1     = $22
  11. ZP2     = $24
  12.  
  13. STROUT  = $AB1E
  14. READY   = $E37B
  15.  
  16.         *= $0801
  17.  
  18.         .WORD BASLINK
  19.         .WORD 1994
  20.         .BYTE $9E,' 2081:'
  21.         .BYTE $8F,' CC64 RT-LIB V1.0',0
  22. BASLINK .WORD 0
  23.  
  24.         JMP INIT
  25.  
  26. JUMPLIST
  27. MAIN.ADR   .WORD 0
  28. CODE.LAST  .WORD 0
  29. INIT.FIRST .WORD 0
  30. INIT.LAST  .WORD 0
  31.  
  32.         JMP (ZP)
  33.         JMP SWITCH
  34.         JMP MULT
  35.         JMP DIVMOD
  36.         JMP SHL
  37.         JMP SHR
  38.  
  39. INIT    LDA CODE.LAST
  40.         STA BASE
  41.         LDA CODE.LAST + 1
  42.         STA BASE + 1
  43.         LDA INIT.LAST
  44.         STA ZP2
  45.         LDX INIT.LAST + 1
  46.         STX ZP2 + 1
  47.         LDY #0
  48. INIT1   CMP INIT.FIRST
  49.         BNE INIT2
  50.         CPX INIT.FIRST + 1
  51. INIT2   BEQ INIT5
  52.         SEC
  53.         SBC #1
  54.         BCS INIT3
  55.         DEX
  56. INIT3   STA ZP2
  57.         STX ZP2 + 1
  58.         LDA (ZP2),Y
  59.         STA (BASE),Y
  60.         INC BASE
  61.         BNE INIT4
  62.         INC BASE + 1
  63. INIT4   LDA ZP2
  64.         JMP INIT1
  65.  
  66. INIT5   JMP (MAIN.ADR)
  67.  
  68. SWITCH  TAY
  69.         PLA
  70.         CLC
  71.         ADC #1
  72.         STA ZP
  73.         PLA
  74.         ADC #0
  75.         STA ZP+1
  76.         TYA
  77.         LDY #0
  78. SWITCH1 PHA
  79.         LDA (ZP),Y
  80.         STA ZP1
  81.         INY
  82.         ORA (ZP),Y
  83.         BEQ SWITCH5
  84.         LDA (ZP),Y
  85.         STA ZP1+1
  86.         INY
  87. ;       BNE SWITCH2
  88. ;       INC ZP+1
  89. SWITCH2 PLA
  90.         CMP (ZP),Y
  91.         PHP
  92.         INY
  93.         PLP
  94.         BNE SWITCH4
  95.         PHA
  96.         TXA
  97.         CMP (ZP),Y
  98.         BNE SWITCH3
  99.         PLA
  100.         JMP (ZP1)
  101. SWITCH3 PLA
  102. SWITCH4 INY
  103.         BNE SWITCH1
  104.         INC ZP+1
  105.         JMP SWITCH1
  106.  
  107. SWITCH5 SEC
  108.         TYA
  109.         ADC ZP
  110.         BCC SWITCH6
  111.         INC ZP+1
  112. SWITCH6 JMP (ZP)
  113.  
  114.  
  115.  
  116. MULT    STX ZP1 + 1
  117.         LSR ZP1 + 1
  118.         ROR
  119.         STA ZP1     ; MULTIPLIKATOR
  120.  
  121.         LDA #0
  122.         STA ZP2
  123.         LDX #16
  124. MU1     BCC MU2
  125.         TAY
  126.         LDA ZP2
  127.         CLC
  128.         ADC ZP
  129.         STA ZP2
  130.         TYA
  131.         ADC ZP + 1
  132. MU2     ROR
  133.         ROR ZP2
  134.         ROR ZP1 + 1
  135.         ROR ZP1
  136.         DEX
  137.         BNE MU1
  138. ;       TAY
  139.         LDA ZP1
  140.         LDX ZP1 + 1  ; LO-WORD PRODUKT
  141. ;       TYA
  142. ;       TAX
  143. ;       LDA ZP2      ; HI-WORD PRODUKT
  144.         RTS
  145.  
  146.  
  147. NEGATE  CLC
  148.         EOR #$FF
  149.         ADC #1
  150.         TAY
  151.         TXA
  152.         EOR #$FF
  153.         ADC #0
  154.         TAX
  155.         TYA
  156.         RTS
  157.  
  158. DIVMOD  STX ZP2  ; SIGN OF DIVISOR
  159.         BIT ZP2
  160.         BPL DIV1
  161.         JSR NEGATE
  162. DIV1    TAY
  163.         LDA ZP + 1
  164.         STX ZP + 1
  165.         STA ZP2 + 1 ; SIGN OF DIVIDENT
  166.         TAX
  167.         EOR ZP2
  168.         ASL
  169.         ROR ZP2  ; SIGN DIVISOR/RESULT
  170.         LDA ZP
  171.         STY ZP
  172.         BIT ZP2 + 1
  173.         BPL DIV2
  174.         JSR NEGATE
  175. DIV2    LDY #0
  176.         STY ZP1
  177.         STY ZP1 + 1
  178. DIV3    CPX ZP + 1
  179.         BNE DIV4
  180.         CMP ZP
  181. DIV4    BCC DIV5
  182.         ASL ZP
  183.         ROL ZP + 1
  184.         INY
  185.         BPL DIV3
  186.         LDA #<DIVñZERO
  187.         LDY #>DIVñZERO
  188.         JSR STROUT
  189.         JMP READY
  190.  
  191. DIV5    DEY
  192.         BMI DIV8
  193.         LSR ZP + 1
  194.         ROR ZP
  195.         CPX ZP + 1
  196.         BNE DIV6
  197.         CMP ZP
  198. DIV6    PHP
  199.         BCC DIV7
  200.         SBC ZP
  201.         PHA
  202.         TXA
  203.         SBC ZP + 1
  204.         TAX
  205.         PLA
  206. DIV7    PLP
  207.         ROL ZP1
  208.         ROL ZP1 + 1
  209.         BCC DIV5
  210.         BRK  ; REMOVE THIS SOME DAY :)
  211.  
  212. DIV8    BIT ZP2+1
  213.         BPL DIV9
  214.         JSR NEGATE
  215. DIV9    STA ZP
  216.         STX ZP + 1
  217.         LDA ZP1
  218.         LDX ZP1 + 1
  219.         BIT ZP2
  220.         BPL DIV10
  221.         JSR NEGATE
  222. DIV10   RTS
  223.  
  224.  
  225. SHL     INY
  226. SHL1    DEY
  227.         BEQ DIV10
  228.         ASL
  229.         PHA
  230.         TXA
  231.         ROL
  232.         TAX
  233.         PLA
  234.         JMP SHL1
  235.  
  236.  
  237. SHR     INY
  238. SHR1    DEY
  239.         BEQ DIV10
  240.         PHA
  241.         TXA
  242.         ASL
  243.         TXA
  244.         ROR
  245.         TAX
  246.         PLA
  247.         ROR
  248.         JMP SHR1
  249.  
  250. DIVñZERO .BYTE 'DIVISION BY ZERO',13,0
  251.  
  252.