[Coco] Setting graphics modes with Assembly
Robert Gault
robert.gault at worldnet.att.net
Sat Dec 20 10:48:53 EST 2008
The main "error" is the first JMP $ADFB. Since you want to return to
your program not Basic, this should be JSR $ADFB. The second use of the
ROM routine is OK because you do want to return to Basic and therefore
should use JMP.
$FFC0 is not The clear bit for the SAM rather A clear bit. All even
bytes in that region act as clears, all odd bytes act as sets for a
specific control toggle.
While it can take more code, it would probably help you to use a generic
routine to write to the SAM control register where you specify the
actual control word rather than bytes.
*Enter with regA equal to the 7-bit SAM value, regB = 7, regX=1st SAM byte
*Leave with SAM set for some video offset
* $E00/$200=7
LDA #7 the above result
JSR SETSAM
... Program code
* Video offset controller for PMODEs
SETSAM LDB #7 for 7-bit word
LDX $FFC6 first SAM offset byte
SAMLUP RORA
BCC SAM2
LEAX 1,X
STA ,X+
BRA SAM3
SAM2 STA ,X++
SAM3 DECB
BNE SAMLUP
RTS
The above routine can be used to setup the SAM for any video location
merely by changing the value in regA. The same type of routine can be
used to set any SAM mode ($FFC0-$FFC5) just by loading regB with 3 and
regX with $FFC0.
Fedor Steeman wrote:
> Hi all,
>
> I have been studying Chris Lomont's reference guide and, combined with your
> help, I am starting to come to grips with it. One thing I don't get yet,
> though, is how to switch from one graphics mode to another. I tried simply
> appending the following to the already written code, but that doesn't do
> anything noticeable:
>
>
> LDA #$E8 * load 1110 1000
> STA VDGSET * set pmode 3
>
> Also: how to set the equivalent of SCREEN 1,0 / 1,1 commands?
>
> This is my complete code so far:
>
> TXTSCR EQU $0400 *Start of text screen
> HIRES1 EQU $E00 *Start of hi-res graphics screen
> VDGSET EQU $FF22 *PIA1 data port B: VDG Control output
> V0CLR EQU $FFC0 *Clear bit for Sam Chip (Graphics mode)
> V1SET EQU $FFC3 *Set V1 bit in Sam Chip (Graphics mode)
> V2SET EQU $FFC5 *set V2 bit in Sam Chip (Graphics mode)
> F0CLR EQU $FFC6 *Display Offset Binary, This is the CLR Bit
> (Video page offset)
> F0SET EQU $FFC7
> F1SET EQU $FFC9
> F2SET EQU $FFCB
> POLCAT EQU $A000 *Color Basic rom poll keyboard routine
>
> ORG $7000
> START LDX #HIRES1
> LDD #$AAAA
> LOOP1 STD ,X++
> CMPX #HIRES1+$1800
> BCS LOOP1
> GMODE STA V0CLR * set graphics mode
> STA V1SET * set graphics mode
> STA V2SET * set graphics mode
> LDA #$F8 * load 1111 1000
> STA F0SET * set graphics mode
> STA F1SET * set graphics mode
> STA F2SET * set graphics mode
> STA VDGSET * set pmode 4 equivalent
> JMP $ADFB * wait for keypress
> LDA #$E8 * load 1110 1000
> STA VDGSET * set pmode 3 equivalent?
> JMP $ADFB
> END START
>
> Thanks for any input!
>
> Cheers,
> Fedor
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> http://five.pairlist.net/mailman/listinfo/coco
>
More information about the Coco
mailing list