[Coco] What was the Disk Extended color basic source code for loading a screen dump saved to disk such as a VEF file?

Robert Gault robert.gault at worldnet.att.net
Sun Jan 17 12:33:21 EST 2010


RJLCyberPunk wrote:

> So does anyone has the BASIC source code around? If so please post it...

>


Here are two very simple Basic programs for saving and loading an
HSCREEN. As written HLOAD assumes the screen was HSCREEN4 but you can
change that.

HSAVE.BAS
10 WIDTH32:PMODE0:PCLEAR1
20 SAVEM"PALETTE",&HFFB0,&HFFBF,0
30 POKE&HFFA1,&H30:POKE&HFFA2,&H31:SAVEM"HSCR1",&H2000,&H5FFF,0
40 POKE&HFFA1,&H32:POKE&HFFA2,&H33:SAVEM"HSCR2",&H2000,&H5FFF,0
50 POKE&HFFA1,&H39:POKE&HFFA2,&H3A

HLOAD.BAS
10 WIDTH32:PMODE0:PCLEAR1:POKE&HE6C6,&H21
20 LOADM"PALETTE"
30 POKE&HFFA1,&H30:POKE&HFFA2,&H31:LOADM"HSCR1"
40 POKE&HFFA1,&H32:POKE&HFFA2,&H33:LOADM"HSCR2"
50 POKE&HFFA1,&H39:POKE&HFFA2,&H3A
60 HSCREEN4
70 GOTO70

If you know that the file is a single screen 640x200x4 vef NTSC artifact
file and have placed the file on a Disk Basic disk, then you could use
this combination of Basic and ml programs to load the image.

10 CMP:WIDTH80:LOADM"VIEWVEF"
20 INPUT"Please indicate the image drive# ->";DR
30 IF DR <0 OR DR>3 THEN CLS:GOTO20
40 DRIVE DR:FOR I=1TO4
50 READ F$:OPEN"I",#1,F$
60 EXEC:CLOSE
70 FORT=1TO2000
80 NEXT T,I
90 HSCREEN0:CMP:CLS
100 END
110 DATA "name.VEF"

* This program will load vef files that have the format
* 160x200x4 using artifact colors. These files have an
* 18 byte header as follows. R.Gault Jan. 12, 2010

header rmb 1 ??
pages rmb 1 should be 1 for one screen
palette rmb 16 but only four entries present for this type

* This is fixed because of the 18 byte header and screen size of
* 160x200 $7D00+$12
filesize equ $7d12

org $e00
start orcc #$50
sts stack2
lds #stack get the stack out of the way of the screen
lbsr clock check for 2MHz use for disk I/O
sta $ffd9 fast CPU
lda $e06f HSCREEN4 init value
ora #$20 HSCREEN4 set to 640x200x4
sta $e06f set a new one
lda #1 disk buffer
sta $6f set console out for disk read
ldy #$ffb0 GIME palettes
lbsr read skip one byte
lbsr read get number of screens
cmpa #1
lbne error
ldb #4 get four palette colors
a@ bsr read
sta ,y+
decb
bne a@
ldb #18-6 skip unused palette entries
b@ bsr read
decb
bne b@

ldb #4 HSCREEN#
jsr $e6a5 set HSCREEN to value in regB
lbsr clean blank the screen
ldd #$c000 *$60000
std $ff9d point video to start of graphics screen
ldd #$3031 Start screen at $60000
std $ffa1 set 2 MMU blocks
incb
stb $ffa3 set a third MMU block
ldx #$2000 fill the screen
ldy #$6000
a@ bsr read
sta ,x+
leay -1,y
bne a@

ldd #$333a
std $ffa1
incb
stb $ffa3 reset 2 MMU blocks and update third
ldx #$2000
ldy #$2000
a@ bsr read
sta ,x+
leay -1,y
bne a@

lda #$39 restore the last MMU block
sta $ffa1
ldx #$ffd8 return CPU to entry speed
lda speed
sta a,x reset CPU clock speed
lds stack2
andcc #$af
rts return to Basic

exit clr $e6 used if there was an error
lda #$1d
sta $e06f
clra
jsr $e019
ldx #$ffd8
lda speed
sta a,x reset CPU clock speed
lds stack2
andcc #$af
jmp $adfb

read tst speed use fast I/O if possible
bne a@
sta $ffd8
a@ jsr $a176
tst speed
bne b@
sta $ffd9
b@ rts

clock clrb test current CPU clock speed
bsr vsync
lda $ff02
a@ incb
lda $ff03
bpl a@
clra
cmpb #$c0
bhi setspd
inca
setspd sta speed
rts

speed rmb 1

vsync lda $ff02
a@ lda $ff03
bpl a@
lda $ff02
rts

error clr $6f
ldx #mesg-1
jsr $b99c PRINT ERROR AND RETURN TO BASIC
bra exit
mesg fcc /SORRY BUT BAD FILE FORMAT!/
fcb 0

clean lda #$34 erase the screen
sta $ffa2
sts stack1
lds #$6000
clrb
ldx #0
ldy #0
ldu #0
a@ clra
b@ pshs d,x,y,u
cmps #$4000
bne b@
lds #$6000
lda $ffa2
anda #$3f
cmpa #$30
beq c@
dec $ffa2
bra a@
c@ lds stack1
lda #$3a
sta $ffa2
rts

rmb 100
stack equ *
stack1 rmb 2
stack2 rmb 2

end start



More information about the Coco mailing list