WeeGUI/asmdemo.s
2015-02-08 17:50:44 -08:00

172 lines
2.1 KiB
ArmAsm

;
; asmdemo.s
; WeeGUI sample application
;
; Created by Quinn Dunki on 8/15/14.
; Copyright (c) 2015 One Girl, One Laptop Productions. All rights reserved.
;
.include "WeeGUI_MLI.s"
.org $6000
INBUF = $0200
DOSCMD = $be03
KBD = $c000
KBDSTRB = $c010
main:
; BRUN the GUI library
ldx #0
ldy #0
@0: lda brunCmdLine,x
beq @1
sta INBUF,y
inx
iny
bra @0
@1: jsr DOSCMD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Show off rendering speed with some snazzy rectangle painting
;
; Stack:
; Curr X
; Curr Y
; Curr Width
; Curr Height
ldx #WGClearScreen
jsr WeeGUI
animateRects:
lda #38 ; Initialize
pha
lda #11
pha
lda #2
pha
lda #2
pha
animateRectsEvenLoop:
@0: lda $C019 ; Sync to VBL
bmi @0
ldx #WGClearScreen
jsr WeeGUI
tsx
inx
lda $0100,x ; Load Height, then modify
sta PARAM3
inc
inc
sta $0100,x
cmp #25
bcs animateRects
inx ; Load Width, then modify
lda $0100,x
sta PARAM2
inc
inc
inc
inc
inc
inc
sta $0100,x
inx ; Load Y, then modify
lda $0100,x
sta PARAM1
dec
sta $0100,x
inx ; Load X, then modify
lda $0100,x
sta PARAM0
dec
dec
dec
sta $0100,x
ldy #64
ldx #WGFillRect
jsr WeeGUI
ldx #WGStrokeRect
jsr WeeGUI
jsr delayShort
jsr delayShort
jsr delayShort
jsr checkKbd
bra animateRectsEvenLoop
delayShort: ; ~1/30 sec
pha
phx
phy
ldy #$06 ; Loop a bit
delayShortOuter:
ldx #$ff
delayShortInner:
nop
nop
nop
nop
nop
nop
nop
dex
bne delayShortInner
dey
bne delayShortOuter
ply
plx
pla
rts
checkKbd:
lda KBD
bpl checkKbdDone
sta KBDSTRB
cmp #241 ; 'q' with high bit set
bne checkKbdDone
ldx #WGExit
jsr WeeGUI
pla ; Pull our own frame off the stack...
pla
pla
pla
pla ; ...four local variables + return address...
pla
rts ; ...so we can quit to ProDOS from here
checkKbdDone:
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
brunCmdLine:
.byte "BRUN weegui",$8d,0
; Suppress some linker warnings - Must be the last thing in the file
.SEGMENT "ZPSAVE"
.SEGMENT "EXEHDR"
.SEGMENT "STARTUP"
.SEGMENT "INIT"
.SEGMENT "LOWCODE"