home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CBM Funet Archive
/
cbm-funet-archive-2003.iso
/
cbm
/
c128
/
graphics
/
viewers
/
vbm
/
vbmlib.s
< prev
next >
Wrap
Text File
|
1998-01-11
|
4KB
|
229 lines
;*** VBMLIB 1.10 PACKAGE - BY cRAIG bRUCE - 13-nOV-93
;VDC REGISTER VALUES COURTESY OF fRED bOWEN OF cOMMODORE
;VDC MEMORY: 00000-21359=EVEN FRAME, 21360-42719=ODD FRAME
;BM FILE: 0-3=FORMAT ('B,'M,$CB,$02), 4-5=WIDTHlh, 6-7=HEIGHTlh, 8-END=BMdATA
.ORG $1300
.OBJ "@0:VBMLIB.BIN"
VDCsTAT = $D600
VDCdATA = $D601
EVENfRAME = 0
ODDfRAME = 21360
CHKIN = $FFC6
CHRIN = $FFCF
CLRCHN = $FFCC
JMP VBMiNIT ;()
JMP VBMfINISH ;()
JMP VBMfILL ;( .a=FILLvALUE )
JMP VBMrEAD ;( .a=WIDTH8, .x=LEFTmARGIN8, ($FA)=DISPhEIGHT,
; ($FC)=TOPmARGIN )
.BYTE $CB,$06,11
VDCwRITE = *
STX VDCsTAT
- BIT VDCsTAT
BPL -
STA VDCdATA
RTS
VDCrEAD = *
STX VDCsTAT
- BIT VDCsTAT
BPL -
LDA VDCdATA
RTS
VBMiNIT = *
CLD
CLI
LDY #0
- LDX INITrEGS,Y
LDA INITvALS,Y
CPX #25
BNE +
JSR VDCrEAD
AND #$0F
ORA INITvALS,Y
+ JSR VDCwRITE
INY
CPY #INITvALS-INITrEGS
BCC -
LDA #$AA
JMP VBMfILL
INITrEGS = *
.BYTE 000,001,002,004,005,006,007,008,009,024,025,027,028,020,021
.BYTE 012,013,026,012,013
INITvALS = *
.BYTE $7E,$50,$66,$4C,006,$4C,$47,003,006,000,$80,000,016,166,224
.BYTE 000,000,224,0,0 ;LAST TWO = >EVENfRAME,<EVENfRAME
VBMfILL = * ;( .a=FILLvALUE )
PHA
LDX #18
LDA #>EVENfRAME
JSR VDCwRITE
LDX #19
LDA #<EVENfRAME
JSR VDCwRITE
LDX #31
PLA
JSR VDCwRITE
LDY #161
- LDX #30
LDA #$00
JSR VDCwRITE
DEY
BNE -
RTS
VBMfINISH = *
JSR $E179
JSR $FF62
LDA #147
JSR $FFD2
RTS
HEIGHT = $FA ;(2)
TOPmARGIN = $FC ;(2)
LMARGIN = $FE ;(1)
RMARGIN = $FF ;(1)
DISPWIDTH .BUF 1
BASEADDR = $FC ;(2)
EVENODD .BUF 1
WIDTH .BUF 1
VBMrEAD = * ;( .a=WIDTH8, .x=LEFTmARGIN8, ($FA)=HEIGHT, ($FC)=TOPmARGIN )
;** ADJUST WIDTH
STA WIDTH
STX LMARGIN
SEC
SBC LMARGIN
CMP #80
BCS +
STA DISPWIDTH
LDA #0
STA RMARGIN
JMP ADJUSThEIGHT
+ SBC #80
STA RMARGIN
LDA #80
STA DISPWIDTH
;** ADJUST HEIGHT
ADJUSThEIGHT = *
SEC
LDA HEIGHT+0
SBC TOPmARGIN+0
STA HEIGHT+0
LDA HEIGHT+1
SBC TOPmARGIN+1
STA HEIGHT+1
LDA HEIGHT+0
CMP #<492
LDA HEIGHT+1
SBC #>492
BCC SETiNPUT
LDA #<492
LDY #>492
STA HEIGHT+0
STY HEIGHT+1
;** SET INPUT
SETiNPUT = *
LDX #1
JSR CHKIN
BCC +
RTS
+ NOP
;** SKIP TOP MARGIN
- LDA TOPmARGIN+0
ORA TOPmARGIN+1
BEQ ++
LDY WIDTH
- JSR CHRIN
DEY
BNE -
LDA TOPmARGIN+0
BNE +
DEC TOPmARGIN+1
+ DEC TOPmARGIN+0
JMP --
+ NOP
;** READ THE LINES
LDA #0
STA BASEADDR+0
STA BASEADDR+1
STA EVENODD
- LDA HEIGHT+0
ORA HEIGHT+1
BNE +
JSR CLRCHN
RTS
+ JSR DISPLAYlINE
LDA EVENODD
AND #$01
BEQ +
CLC
LDA BASEADDR+0
ADC #80
STA BASEADDR+0
BCC +
INC BASEADDR+1
+ INC EVENODD
LDA HEIGHT+0
BNE +
DEC HEIGHT+1
+ DEC HEIGHT+0
JMP -
DISPLAYlINE = *
;** SET LINE ADDRESS
LDA EVENODD
AND #$01
BNE +
LDA BASEADDR+0
PHA
LDA BASEADDR+1
JMP ++
+ CLC
LDA BASEADDR+0
ADC #<ODDfRAME
PHA
LDA BASEADDR+1
ADC #>ODDfRAME
+ LDX #18
JSR VDCwRITE
LDX #19
PLA
JSR VDCwRITE
;** POKE LINE
LDY LMARGIN
BEQ +
- JSR CHRIN
DEY
BNE -
+ LDY DISPWIDTH
BEQ +
- JSR CHRIN
EOR #$FF
LDX #31
JSR VDCwRITE
DEY
BNE -
+ LDY RMARGIN
BEQ +
- JSR CHRIN
DEY
BNE -
+ RTS