home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / c128 / graphics / viewers / vbm / vbmlib.s < prev    next >
Text File  |  1998-01-11  |  4KB  |  229 lines

  1. ;*** VBMLIB 1.10 PACKAGE - BY cRAIG bRUCE - 13-nOV-93
  2.  
  3. ;VDC REGISTER VALUES COURTESY OF fRED bOWEN OF cOMMODORE
  4.  
  5. ;VDC MEMORY: 00000-21359=EVEN FRAME, 21360-42719=ODD FRAME
  6. ;BM FILE: 0-3=FORMAT ('B,'M,$CB,$02), 4-5=WIDTHlh, 6-7=HEIGHTlh, 8-END=BMdATA
  7.  
  8. .ORG $1300
  9. .OBJ "@0:VBMLIB.BIN"
  10.  
  11. VDCsTAT    = $D600
  12. VDCdATA    = $D601
  13. EVENfRAME  = 0
  14. ODDfRAME   = 21360
  15.  
  16. CHKIN  = $FFC6
  17. CHRIN  = $FFCF
  18. CLRCHN = $FFCC
  19.  
  20.         JMP VBMiNIT     ;()
  21.         JMP VBMfINISH   ;()
  22.         JMP VBMfILL     ;( .a=FILLvALUE )
  23.         JMP VBMrEAD     ;( .a=WIDTH8, .x=LEFTmARGIN8, ($FA)=DISPhEIGHT,
  24.                         ;  ($FC)=TOPmARGIN )
  25.  
  26.         .BYTE $CB,$06,11
  27.  
  28. VDCwRITE = *
  29.         STX VDCsTAT
  30. -       BIT VDCsTAT
  31.         BPL -
  32.         STA VDCdATA
  33.         RTS
  34.  
  35. VDCrEAD = *
  36.         STX VDCsTAT
  37. -       BIT VDCsTAT
  38.         BPL -
  39.         LDA VDCdATA
  40.         RTS
  41.  
  42. VBMiNIT = *
  43.         CLD
  44.         CLI
  45.         LDY #0
  46. -       LDX INITrEGS,Y
  47.         LDA INITvALS,Y
  48.         CPX #25
  49.         BNE +
  50.         JSR VDCrEAD
  51.         AND #$0F
  52.         ORA INITvALS,Y
  53. +       JSR VDCwRITE
  54.         INY
  55.         CPY #INITvALS-INITrEGS
  56.         BCC -
  57.         LDA #$AA
  58.         JMP VBMfILL
  59.  
  60. INITrEGS = *
  61.         .BYTE 000,001,002,004,005,006,007,008,009,024,025,027,028,020,021
  62.         .BYTE 012,013,026,012,013
  63. INITvALS = *            
  64.         .BYTE $7E,$50,$66,$4C,006,$4C,$47,003,006,000,$80,000,016,166,224
  65.         .BYTE 000,000,224,0,0    ;LAST TWO = >EVENfRAME,<EVENfRAME
  66.  
  67. VBMfILL = *  ;( .a=FILLvALUE )
  68.         PHA
  69.         LDX #18
  70.         LDA #>EVENfRAME
  71.         JSR VDCwRITE
  72.         LDX #19
  73.         LDA #<EVENfRAME
  74.         JSR VDCwRITE
  75.         LDX #31
  76.         PLA
  77.         JSR VDCwRITE
  78.         LDY #161
  79. -       LDX #30
  80.         LDA #$00
  81.         JSR VDCwRITE
  82.         DEY
  83.         BNE -
  84.         RTS
  85.  
  86. VBMfINISH = *
  87.         JSR $E179
  88.         JSR $FF62
  89.         LDA #147
  90.         JSR $FFD2
  91.         RTS
  92.  
  93. HEIGHT    = $FA ;(2)
  94. TOPmARGIN = $FC ;(2)
  95. LMARGIN   = $FE ;(1)
  96. RMARGIN   = $FF ;(1)
  97. DISPWIDTH .BUF 1
  98. BASEADDR  = $FC ;(2)
  99. EVENODD   .BUF 1
  100. WIDTH     .BUF 1
  101.  
  102. VBMrEAD = *  ;( .a=WIDTH8, .x=LEFTmARGIN8, ($FA)=HEIGHT, ($FC)=TOPmARGIN )
  103.         ;** ADJUST WIDTH
  104.         STA WIDTH
  105.         STX LMARGIN
  106.         SEC
  107.         SBC LMARGIN
  108.         CMP #80
  109.         BCS +
  110.         STA DISPWIDTH
  111.         LDA #0
  112.         STA RMARGIN
  113.         JMP ADJUSThEIGHT
  114. +       SBC #80
  115.         STA RMARGIN
  116.         LDA #80
  117.         STA DISPWIDTH
  118.  
  119.         ;** ADJUST HEIGHT
  120.         ADJUSThEIGHT = *
  121.         SEC
  122.         LDA HEIGHT+0
  123.         SBC TOPmARGIN+0
  124.         STA HEIGHT+0
  125.         LDA HEIGHT+1
  126.         SBC TOPmARGIN+1
  127.         STA HEIGHT+1
  128.         LDA HEIGHT+0
  129.         CMP #<492
  130.         LDA HEIGHT+1
  131.         SBC #>492
  132.         BCC SETiNPUT
  133.         LDA #<492
  134.         LDY #>492
  135.         STA HEIGHT+0
  136.         STY HEIGHT+1
  137.  
  138.         ;** SET INPUT
  139.         SETiNPUT = *
  140.         LDX #1
  141.         JSR CHKIN
  142.         BCC +
  143.         RTS
  144. +       NOP
  145.  
  146.         ;** SKIP TOP MARGIN
  147. -       LDA TOPmARGIN+0
  148.         ORA TOPmARGIN+1
  149.         BEQ ++
  150.         LDY WIDTH
  151. -       JSR CHRIN
  152.         DEY
  153.         BNE -
  154.         LDA TOPmARGIN+0
  155.         BNE +
  156.         DEC TOPmARGIN+1
  157. +       DEC TOPmARGIN+0
  158.         JMP --
  159. +       NOP
  160.  
  161.         ;** READ THE LINES
  162.         LDA #0
  163.         STA BASEADDR+0
  164.         STA BASEADDR+1
  165.         STA EVENODD
  166. -       LDA HEIGHT+0
  167.         ORA HEIGHT+1
  168.         BNE +
  169.         JSR CLRCHN
  170.         RTS
  171. +       JSR DISPLAYlINE
  172.         LDA EVENODD
  173.         AND #$01
  174.         BEQ +
  175.         CLC
  176.         LDA BASEADDR+0
  177.         ADC #80
  178.         STA BASEADDR+0
  179.         BCC +
  180.         INC BASEADDR+1
  181. +       INC EVENODD
  182.         LDA HEIGHT+0
  183.         BNE +
  184.         DEC HEIGHT+1
  185. +       DEC HEIGHT+0
  186.         JMP -
  187.  
  188. DISPLAYlINE = *
  189.         ;** SET LINE ADDRESS
  190.         LDA EVENODD
  191.         AND #$01
  192.         BNE +
  193.         LDA BASEADDR+0
  194.         PHA
  195.         LDA BASEADDR+1
  196.         JMP ++
  197. +       CLC
  198.         LDA BASEADDR+0
  199.         ADC #<ODDfRAME
  200.         PHA
  201.         LDA BASEADDR+1
  202.         ADC #>ODDfRAME
  203. +       LDX #18
  204.         JSR VDCwRITE
  205.         LDX #19
  206.         PLA
  207.         JSR VDCwRITE
  208.  
  209.         ;** POKE LINE
  210.         LDY LMARGIN
  211.         BEQ +
  212. -       JSR CHRIN
  213.         DEY
  214.         BNE -
  215. +       LDY DISPWIDTH
  216.         BEQ +
  217. -       JSR CHRIN
  218.         EOR #$FF
  219.         LDX #31
  220.         JSR VDCwRITE
  221.         DEY
  222.         BNE -
  223. +       LDY RMARGIN
  224.         BEQ +
  225. -       JSR CHRIN
  226.         DEY
  227.         BNE -
  228. +       RTS
  229.