;-------------------------------------------------- ; VDP Control Test ;-------------------------------------------------- ; Declare Constants ; Memory Map Constants RAMBOTTOM EQU $00000000 ; Bottom of Main RAM Block RAMTOP EQU $003dcfff ; Top of Main RAM Block STACK_BASE EQU $00010000 LOMEM EQU $400 ; Lowest usable address HIMEM EQU RAMTOP+1 ; Highest memory address + 1 (excluding basic space) ;STKLEN EQU $1000 ; Default stacksize DUART_BASE EQU $003df501 ; 68681 (DUART) VDP_BASE EQU $003df600 ; V9990 (Video Processor) FDC_BASE EQU $003df700 ; WD177x (Floppy) PIT1_BASE EQU $003dfa00 ; 68230 (Joysticks) PIT2_BASE EQU $003dfb00 ; 68230 (Parallel Port, Floppy) SID1_BASE EQU $003df800 ; SID 1 (left audio channel) SID2_BASE EQU $003df900 ; SID 2 (right audio channel) RTC_BASE EQU $003dfc00 ; RTC72421 (Real Time Clock) IDE_CS0 EQU $003dfd00 IDE_CS1 EQU $003dfe00 NIC_BASE EQU $003dff00 ; CS8900a (Network Controller) ROM EQU $003e0000 ; Rom Location RAMEXT EQU $003e8000 ; extension RAM to $003fffff ;Character Constants CR EQU $0D ; Carriage_return LF EQU $0A ; Line_feed SPACE EQU $20 ; Space BS EQU $08 ; Back_space Ctrl_A EQU $01 ; CTRL_A force return to monitor ESC EQU $1B ; ASCII escape character (used by TM) ;----------------------------------------------------------------------------------------------------- ; ; Executable Code Area ; ;----------------------------------------------------------------------------------------------------- org ROM dc.l STACK_BASE dc.l MAIN MAIN ; perform reset move.b #$02,$3df60E ; vdp syscontrol nop ; bit of a pause just in case we need one nop nop nop nop move.b #$00,$3df60E ; vdp syscontrol ;check status before we continue WAIT move.b $3df610, D0 ; read status btst #$01,D0 bne.s WAIT ;set screen mode move.b #$06,$3df608 ; vdp set reg move.b #$59,$3df606 ; vdp data reg move.b #$07,$3df608 move.b #$08,$3df606 move.b #$00,$3df60E ; vdp control move.b #$08,$3df608 ; control reg move.b #$C2,$3df606 ; 194 enable display 66 disable display move.b #$0D,$3df608 ; palette control move.b #$00,$3df606 move.b #$00,$3df606 ;setup palette 16 entries of 3 bytes (RGB) clr.b D0 ; colours counter move.b #$0E,$3df608 ; control reg move.b #$00,$3df606 lea.l Palette, A1 PalettLoop move.b (A1)+, D1 move.b D1,$3df602 ;red move.b (A1)+, D1 move.b D1,$3df602 ;green move.b (A1)+, D1 move.b D1,$3df602 ;blue addq.b #$1,D0 cmpi.b #$10, D0 bne.s PalettLoop ; set backdrop colour move.b #$0F,$3df608 ; backdrop colour move.b #$04,$3df606 ;load font data to vram $00000 move.b #0,$3df608 move.b #0,$3df606 ;move.b #1,$3df608 move.b #0,$3df606 ;move.b #2,$3df608 move.b #0,$3df606 clr.l D0 ;loop counter lea Font,A0 f2v_loop move.b (A0,D0.L),D1 cmpi.b #-1,D1 ; exit if font data is $FF beq.s f2v_exit move.b D1,$3df600 addq.w #$01,D0 ; increment count and loop bra.s f2v_loop f2v_exit ;clear screen move.b #$00,$3df608 ; set vram pointer to $7C000 move.b #$00,$3df606 move.b #$C0,$3df606 move.b #$07,$3df606 move.w #$00, D0 ; loop counter clr_loop move.b #$00,$3df600 move.b #$00,$3df600 addq.w #$01,D0 cmpi.w #$EC8, D0 ; increment count and loop bne.s clr_loop ; fill screen with 'A's move.w #$00, D0 ; loop counter fill_loop move.b #$21,$3df600 move.b #$00,$3df600 addq.w #$01,D0 cmpi.w #$EC8, D0 ; increment count and loop bne.s fill_loop LOOP bra.s LOOP include font.inc