Changes

Jump to: navigation, search
Created page with "<pre> ;--------------------------------------------------------------------- ; 256 byte Overscan MegaText Intro v1.1b ; (7DX Demo Party 2011 Release) ; ; for Amstrad 464/664..."
<pre>
;---------------------------------------------------------------------
; 256 byte Overscan MegaText Intro v1.1b
; (7DX Demo Party 2011 Release)
;
; for Amstrad 464/664/6128 computers
;
; by matahari - (Dec 24, 2011)
;
; Featuring;
; - Greetings message via 50Hz CRTC hardware scroll
; - 100% overscan (full) screen size
; - Complete Amstrad palette (27 colours) on screen at once
; - And, all in 256 bytes!
;---------------------------------------------------------------------

LET ADDR_Start = &400
LET ADDR_TextMap = ADDR_Start + 256

LET CONST_TotalRasterLines = 269

LET VAR_BgrndColour = ADDR_Start - 1
LET VAR_FlipFlop = VAR_BgrndColour - 1
LET VAR_LineSkipMinus = CONST_TotalRasterLines * -9
LET VAR_LineSkipPlus = CONST_TotalRasterLines * 9

VAR_XOR equ 1 xor 0

run start
org ADDR_Start

start: ;--------- Generate a dummy interrupt handler ---------------------------

ld hl,&c9fb
ld (&0038),hl

;--------- Set CRTC Registers -------------------------------------------

ld hl,CRTC_Data
loopCRTC: ld a,(hl)
ld b,&bc + 1
outi
ld b,&bd + 1
outi
inc a
jr nz,loopCRTC

;--------- Display text message -----------------------------------------

ld hl,ADDR_TextMap
ld de,Message

loopText: push de
push hl
ld a,2
call &bc0e
pop hl
pop de

ld a,(de)
cp 255
jr z,loopExec

call &bb5a

inc de
push de

;--------- Grab pixels of displayed char --------------------------------

ld de,&c000
ld a,8
ld c,&40
outer: ex af,af'
ld iy,vangelis + 1
ld (iy),%10000000
call Proc_FlipFlop
inner: call Proc_FlipFlop
or a
jr z,bitBckgrndA
ld a,&55
jr bitBckgrndB
bitBckgrndA: ld a,&57
bitBckgrndB: ld (VAR_BgrndColour),a
ld a,(de)
vangelis: and 0
jr z,blit
ld a,c

;*********************************

blit: push hl
push de
push bc
ld de,9
ld b,26
blitText: add hl,de
or a
jr z,blitBckgrnd
ld (hl),c
inc c
jr blitSkip

blitBckgrnd: push af
ld a,(VAR_BgrndColour)
ld (hl),a
pop af

blitSkip: djnz blitText
pop bc
pop de
pop hl

;*********************************

inc hl
rr (iy)
jr nc,inner

inc hl

ld a,8
add a,d
ld d,a

push bc
ld bc,25*9
add hl,bc
pop bc

ex af,af'
dec a
jr nz,outer

pop de
jr loopText

;*********************************************************************
; MAIN LOOP - INITIALIZE!
;*********************************************************************

loopExec: ld hl,ADDR_TextMap + VAR_LineSkipPlus

; Checking VBlanking only for once!
; Rest of the code will be manually synced
; via precise t-state calculations.
ld b,&f5
waitVBlanking: in a,(c)
rra
jr nc,waitVBlanking

halt
di

;--------- X-Pos Alignment ----------------------------------------------

ld a,(hl) ; waste time! => 7 cycles
; Aligns perfect on WinApe.

; If you need precise
; alignment on an original Amstrad,
; you need to comment out this line
; OR replace it with a NOP!

; No worries, intro size will not
; exceed 256 bytes either way ;-)

;*********************************************************************
; MAIN LOOP - BEGIN
;*********************************************************************

loopBegin: ld de,VAR_LineSkipMinus + 9
add hl,de

;--------- Wait for perfect sync! ---------------------------------------

ld b,203 ; waste time!
waste1: nop ; waste time!
add ix,ix ; waste time!
djnz waste1 ; waste time!

;--------- Start CRTC code ----------------------------------------------

ld de,CONST_TotalRasterLines
ld bc,&7f00
out (c),c

crash: outi
inc b
outi
inc b
outi
inc b
outi
inc b
outi
inc b
outi
inc b
outi
inc b
outi
inc b
outi
inc b

ld a,(hl) ; waste time!
nop ; waste time!

dec de
ld a,d
or e
jr nz,crash

;--------- Raster colour = Black ----------------------------------------

ld a,&54
out (c),a

nop ; waste time!
ld b,(hl) ; waste time!
ld b,224 ; waste time!
waste2: djnz waste2 ; waste time!

loopEnd: jr loopBegin

;*********************************************************************
; MAIN LOOP - END
;*********************************************************************


;--------- Procedure for Flip/Flop --------------------------------------

Proc_FlipFlop: ld a,(VAR_FlipFlop)
xor VAR_XOR
ld (VAR_FlipFlop),a
ret

;--------- CRTC Data ----------------------------------------------------

CRTC_Data: db 1,54 ; set display width
db 2,50 ; set horizontal sync
db 6,34 ; set display height
db 7,35 ; set vertical sync
db 255 ; => EXIT LOOP

Message: db ' WELCOME TO 7DX2011 ',255

</pre>
14
edits