first commit
This commit is contained in:
186
game_simple.s
Normal file
186
game_simple.s
Normal file
@@ -0,0 +1,186 @@
|
||||
MACHINE 68000
|
||||
|
||||
INCDIR "c:/Users/capitano/Documents/giochino/"
|
||||
INCLUDE "custom.i"
|
||||
|
||||
SECTION Code,CODE_C
|
||||
|
||||
START:
|
||||
; Don't use OS calls - we're booting from scratch
|
||||
lea CUSTOM,a6
|
||||
|
||||
; Save old DMA/INT state
|
||||
move.w DMACONR(a6),d0
|
||||
or.w #$8000,d0
|
||||
move.w d0,OldDmaCon
|
||||
move.w INTENAR(a6),d0
|
||||
or.w #$8000,d0
|
||||
move.w d0,OldIntEna
|
||||
|
||||
; Disable interrupts and DMA
|
||||
move.w #$7FFF,INTENA(a6)
|
||||
move.w #$7FFF,DMACON(a6)
|
||||
move.w #$7FFF,INTREQ(a6)
|
||||
|
||||
; Setup 1 bitplane display
|
||||
move.w #$1200,BPLCON0(a6)
|
||||
move.w #0,BPLCON1(a6)
|
||||
move.w #0,BPLCON2(a6)
|
||||
move.w #0,BPL1MOD(a6)
|
||||
|
||||
; Display window
|
||||
move.w #$2c81,DIWSTRT(a6)
|
||||
move.w #$2cc1,DIWSTOP(a6)
|
||||
move.w #$0038,DDFSTRT(a6)
|
||||
move.w #$00d0,DDFSTOP(a6)
|
||||
|
||||
; Set bitplane pointer
|
||||
lea Screen(pc),a0
|
||||
move.l a0,d0
|
||||
move.w d0,BPL1PTL(a6)
|
||||
swap d0
|
||||
move.w d0,BPL1PTH(a6)
|
||||
|
||||
; Set colors
|
||||
move.w #$0000,COLOR00(a6) ; Black background
|
||||
move.w #$0FF0,COLOR01(a6) ; Green text
|
||||
|
||||
; Setup Copper (simple - just colors)
|
||||
lea CopperList(pc),a0
|
||||
move.l a0,d0
|
||||
move.w d0,COP1LCL(a6)
|
||||
swap d0
|
||||
move.w d0,COP1LCH(a6)
|
||||
move.w #0,COPJMP1(a6)
|
||||
|
||||
; Enable DMA
|
||||
move.w #$83C0,DMACON(a6)
|
||||
|
||||
; Clear screen
|
||||
lea Screen(pc),a0
|
||||
move.w #(40*256)/4-1,d0
|
||||
.clear:
|
||||
move.l #0,(a0)+
|
||||
dbf d0,.clear
|
||||
|
||||
; Draw simple text
|
||||
lea WelcomeMsg(pc),a0
|
||||
moveq #5,d0 ; X
|
||||
moveq #10,d1 ; Y
|
||||
bsr DrawText
|
||||
|
||||
MAIN_LOOP:
|
||||
; Wait VBlank
|
||||
bsr WaitVBlank
|
||||
|
||||
; Check mouse button to exit
|
||||
btst #6,CIAA
|
||||
bne.s MAIN_LOOP
|
||||
|
||||
EXIT:
|
||||
; Restore and exit (reboot)
|
||||
lea CUSTOM,a6
|
||||
move.w #$7FFF,DMACON(a6)
|
||||
move.w #$7FFF,INTENA(a6)
|
||||
|
||||
; Cold reboot
|
||||
lea $1000000,a0
|
||||
jmp (a0)
|
||||
|
||||
WaitVBlank:
|
||||
lea CUSTOM,a6
|
||||
.wait:
|
||||
move.l $04(a6),d0
|
||||
and.l #$1ff00,d0
|
||||
cmp.l #300<<8,d0
|
||||
bne.s .wait
|
||||
rts
|
||||
|
||||
; DrawText - Simple version
|
||||
; a0=string, d0=X, d1=Y
|
||||
DrawText:
|
||||
movem.l d0-d3/a0-a2,-(sp)
|
||||
lea Screen(pc),a1
|
||||
mulu #320,d1
|
||||
add.l d1,a1
|
||||
add.w d0,a1
|
||||
|
||||
.loop:
|
||||
move.b (a0)+,d2
|
||||
beq.s .done
|
||||
cmp.b #32,d2
|
||||
blt.s .loop
|
||||
|
||||
sub.b #32,d2
|
||||
ext.w d2
|
||||
lea Font8x8(pc),a2
|
||||
lsl.w #3,d2
|
||||
add.w d2,a2
|
||||
|
||||
move.b (a2)+,(a1)
|
||||
move.b (a2)+,40(a1)
|
||||
move.b (a2)+,80(a1)
|
||||
move.b (a2)+,120(a1)
|
||||
move.b (a2)+,160(a1)
|
||||
move.b (a2)+,200(a1)
|
||||
move.b (a2)+,240(a1)
|
||||
move.b (a2)+,280(a1)
|
||||
|
||||
addq.w #1,a1
|
||||
bra.s .loop
|
||||
|
||||
.done:
|
||||
movem.l (sp)+,d0-d3/a0-a2
|
||||
rts
|
||||
|
||||
; Data
|
||||
CNOP 0,4
|
||||
CopperList:
|
||||
DC.W COLOR00,$0000
|
||||
DC.W COLOR01,$0FF0
|
||||
DC.W $FFFF,$FFFE
|
||||
|
||||
WelcomeMsg:
|
||||
dc.b "OFFICE EMAIL GAME",0
|
||||
dc.b "CLICK MOUSE TO EXIT",0
|
||||
|
||||
OldDmaCon: dc.w 0
|
||||
OldIntEna: dc.w 0
|
||||
|
||||
CNOP 0,2
|
||||
Font8x8:
|
||||
; Minimal font (space + A-Z)
|
||||
dc.b $00,$00,$00,$00,$00,$00,$00,$00 ; Space
|
||||
dcb.b 8*15,0 ; Skip to A
|
||||
dc.b $18,$24,$42,$42,$7E,$42,$42,$00 ; A
|
||||
dc.b $7C,$42,$42,$7C,$42,$42,$7C,$00 ; B
|
||||
dc.b $3C,$42,$40,$40,$40,$42,$3C,$00 ; C
|
||||
dc.b $78,$44,$42,$42,$42,$44,$78,$00 ; D
|
||||
dc.b $7E,$40,$40,$78,$40,$40,$7E,$00 ; E
|
||||
dc.b $7E,$40,$40,$78,$40,$40,$40,$00 ; F
|
||||
dc.b $3C,$42,$40,$4E,$42,$42,$3C,$00 ; G
|
||||
dc.b $42,$42,$42,$7E,$42,$42,$42,$00 ; H
|
||||
dc.b $3C,$18,$18,$18,$18,$18,$3C,$00 ; I
|
||||
dc.b $06,$06,$06,$06,$06,$46,$3C,$00 ; J
|
||||
dc.b $44,$48,$50,$60,$50,$48,$44,$00 ; K
|
||||
dc.b $40,$40,$40,$40,$40,$40,$7E,$00 ; L
|
||||
dc.b $42,$66,$5A,$42,$42,$42,$42,$00 ; M
|
||||
dc.b $42,$62,$52,$4A,$46,$42,$42,$00 ; N
|
||||
dc.b $3C,$42,$42,$42,$42,$42,$3C,$00 ; O
|
||||
dc.b $7C,$42,$42,$7C,$40,$40,$40,$00 ; P
|
||||
dc.b $3C,$42,$42,$42,$52,$4A,$3C,$00 ; Q
|
||||
dc.b $7C,$42,$42,$7C,$48,$44,$42,$00 ; R
|
||||
dc.b $3C,$40,$40,$3C,$02,$02,$3C,$00 ; S
|
||||
dc.b $7E,$18,$18,$18,$18,$18,$18,$00 ; T
|
||||
dc.b $42,$42,$42,$42,$42,$42,$3C,$00 ; U
|
||||
dc.b $42,$42,$42,$42,$42,$24,$18,$00 ; V
|
||||
dc.b $42,$42,$42,$5A,$5A,$66,$42,$00 ; W
|
||||
dc.b $42,$24,$18,$18,$18,$24,$42,$00 ; X
|
||||
dc.b $42,$42,$24,$18,$18,$18,$18,$00 ; Y
|
||||
dc.b $7E,$04,$08,$10,$20,$40,$7E,$00 ; Z
|
||||
|
||||
CNOP 0,4
|
||||
Screen:
|
||||
ds.b 40*256
|
||||
|
||||
END
|
||||
Reference in New Issue
Block a user