gigatron/rom/Contrib/delpozzo/VideoPoker/VideoPoker.gasm
2025-01-28 19:17:01 +03:00

4841 lines
311 KiB
Plaintext

_startAddress_ EQU 0x0200
; Internal Variables
serialRawPrev EQU 0x0081
register0 EQU 0x0082
register1 EQU register0 + 0x02
register2 EQU register0 + 0x04
register3 EQU register0 + 0x06
register4 EQU register0 + 0x08
register5 EQU register0 + 0x0A
register6 EQU register0 + 0x0C
register7 EQU register0 + 0x0E
register8 EQU register0 + 0x10
register9 EQU register0 + 0x12
register10 EQU register0 + 0x14
register11 EQU register0 + 0x16
register12 EQU register0 + 0x18
register13 EQU register0 + 0x1A
register14 EQU register0 + 0x1C
register15 EQU register0 + 0x1E
fgbgColour EQU register0 + 0x20
cursorXY EQU register0 + 0x22
midiStream EQU register0 + 0x24
midiDelay EQU register0 + 0x26
miscFlags EQU register0 + 0x28
timerTick EQU register0 + 0x2A
timerPrev EQU register0 + 0x2C
; Internal Constants
ENABLE_SCROLL_BIT EQU 0x0001
ON_BOTTOM_ROW_BIT EQU 0x0002
ENABLE_SCROLL_MSK EQU 0xfffe
ON_BOTTOM_ROW_MSK EQU 0xfffd
; Internal Buffers
regsWorkArea EQU 0x0000
textWorkArea EQU 0x7fa0
; Includes
%includePath "../../at67/gbas/runtime"
%include util.i
%include gigatron.i
%include macros.i
; Labels
_entryPoint_ EQU 0x0200
_loop EQU 0x02ce
_handleInput EQU 0x02eb
_gameOverInput EQU 0x04d4
_displayGameOver EQU 0x050d
_playSndCardFlip EQU 0x0539
_playSndHold EQU 0x057f
_playSndUnHold EQU 0x05c5
_playSndBet EQU 0x0616
_playSndWin EQU 0x063b
_getRomNote EQU 0x06b2
_initCards EQU 0x06c8
_clearHand EQU 0x08e0
_dealCards EQU 0x09f6
_retry1 EQU 0x0aa6
_cheatDeal EQU 0x0af5
_drawCards EQU 0x0caa
_retry2 EQU 0x0cc7
_selectCard EQU 0x0dc7
_holdCard EQU 0x10f5
_displayPayouts EQU 0x13ea
_displayBalance EQU 0x19a9
_updateBalance EQU 0x1cce
_displayBet EQU 0x1eae
_displayCardBacks EQU 0x1ef0
_displayCards EQU 0x21cc
_sortCards EQU 0x3dbb
_checkHand EQU 0x3ee6
_jacksOrBetter EQU 0x43d4
_twoPair EQU 0x44d6
_threeOfAKind EQU 0x45e1
_straight EQU 0x47a4
_flush EQU 0x48da
_fullHouse EQU 0x4ac2
_fourOfAKind EQU 0x4bc0
_straightFlush EQU 0x4cbe
_royalFlush EQU 0x4cdd
_else_0x02e6 EQU 0x02e4
_endif_0x02eb EQU 0x02e9
_page_0x0300 EQU 0x0300
_endif_0x0330 EQU 0x032e
_endif_0x033e EQU 0x033c
_endif_0x037b EQU 0x036b
_endif_0x0389 EQU 0x0379
_endif_0x03c5 EQU 0x03a7
_endif_0x03d8 EQU 0x03ba
_endif_0x0414 EQU 0x03e8
_page_0x0400 EQU 0x0400
_endif_0x0427 EQU 0x040b
_else_0x0473 EQU 0x044f
_endif_0x049e EQU 0x0476
_endif_0x04ba EQU 0x048a
_endif_0x04d3 EQU 0x04a3
_endif_0x04dc EQU 0x04ac
_endif_0x050a EQU 0x04d2
_page_0x0500 EQU 0x0500
_endif_0x053a EQU 0x050b
_page_0x0600 EQU 0x0600
_next_0x0701 EQU 0x06d1
_page_0x08a0 EQU 0x08a0
_endif_0x077e EQU 0x08d0
_next_0x0793 EQU 0x08e5
_page_0x09a0 EQU 0x09a0
_page_0x0aa0 EQU 0x0aa0
_else_0x0853 EQU 0x0adc
_endif_0x0858 EQU 0x0ae1
_page_0x0ba0 EQU 0x0ba0
_page_0x0ca0 EQU 0x0ca0
_next_0x08f9 EQU 0x0caf
_page_0x0da0 EQU 0x0da0
_else_0x098a EQU 0x0db2
_endif_0x098f EQU 0x0db7
_page_0x0ea0 EQU 0x0ea0
_page_0x0fa0 EQU 0x0fa0
_elseif_0x0a3b EQU 0x0fb4
_elseif_0x0a65 EQU 0x0fda
_page_0x10a0 EQU 0x10a0
_elseif_0x0a8f EQU 0x10ac
_elseif_0x0ab9 EQU 0x10d2
_endif_0x0ade EQU 0x10f3
_page_0x11a0 EQU 0x11a0
_elseif_0x0b02 EQU 0x11bd
_elseif_0x0b1b EQU 0x11d2
_elseif_0x0b34 EQU 0x11e7
_page_0x12a0 EQU 0x12a0
_elseif_0x0b4d EQU 0x12a7
_endif_0x0b61 EQU 0x12b7
_page_0x13a0 EQU 0x13a0
_elseif_0x0bc4 EQU 0x13ac
_endif_0x0c14 EQU 0x13e8
_page_0x14a0 EQU 0x14a0
_endif_0x0c33 EQU 0x14ae
_endif_0x0c67 EQU 0x14de
_page_0x15a0 EQU 0x15a0
_endif_0x0c9b EQU 0x15bb
_endif_0x0ccf EQU 0x15eb
_page_0x16a0 EQU 0x16a0
_endif_0x0d03 EQU 0x16c5
_endif_0x0d37 EQU 0x16f5
_page_0x17a0 EQU 0x17a0
_endif_0x0d6b EQU 0x17d0
_page_0x18a0 EQU 0x18a0
_endif_0x0d9f EQU 0x18ae
_endif_0x0dd3 EQU 0x18de
_page_0x19a0 EQU 0x19a0
_page_0x1aa0 EQU 0x1aa0
_elseif_0x0e46 EQU 0x1aa4
_elseif_0x0e92 EQU 0x1aec
_page_0x1ba0 EQU 0x1ba0
_else_0x0edf EQU 0x1be6
_page_0x1ca0 EQU 0x1ca0
_endif_0x0f16 EQU 0x1ccc
_page_0x1da0 EQU 0x1da0
_endif_0x0f86 EQU 0x1dda
_endif_0x0f94 EQU 0x1de8
_page_0x1ea0 EQU 0x1ea0
_endif_0x0fb2 EQU 0x1eac
_page_0x1fa0 EQU 0x1fa0
_page_0x20a0 EQU 0x20a0
_page_0x21a0 EQU 0x21a0
_page_0x22a0 EQU 0x22a0
_endif_0x1140 EQU 0x22d4
_page_0x23a0 EQU 0x23a0
_else_0x11b4 EQU 0x23dc
_endif_0x11b8 EQU 0x23e0
_page_0x24a0 EQU 0x24a0
_elseif_0x11fb EQU 0x24c1
_page_0x25a0 EQU 0x25a0
_elseif_0x123e EQU 0x25a2
_elseif_0x1281 EQU 0x25d9
_page_0x26a0 EQU 0x26a0
_else_0x12c4 EQU 0x26bb
_endif_0x12f1 EQU 0x26e0
_page_0x27a0 EQU 0x27a0
_endif_0x1316 EQU 0x27a7
_page_0x28a0 EQU 0x28a0
_endif_0x137a EQU 0x28a7
_page_0x29a0 EQU 0x29a0
_else_0x13ee EQU 0x29b3
_endif_0x13f2 EQU 0x29b7
_elseif_0x1435 EQU 0x29ee
_page_0x2aa0 EQU 0x2aa0
_elseif_0x1478 EQU 0x2ad0
_page_0x2ba0 EQU 0x2ba0
_elseif_0x14bb EQU 0x2bb6
_else_0x14fe EQU 0x2bed
_page_0x2ca0 EQU 0x2ca0
_endif_0x152b EQU 0x2cbf
_endif_0x1550 EQU 0x2cdc
_page_0x2da0 EQU 0x2da0
_endif_0x15b4 EQU 0x2ddc
_page_0x2ea0 EQU 0x2ea0
_else_0x1628 EQU 0x2ee2
_endif_0x162c EQU 0x2ee6
_page_0x2fa0 EQU 0x2fa0
_elseif_0x166f EQU 0x2fcb
_page_0x30a0 EQU 0x30a0
_elseif_0x16b2 EQU 0x30ac
_elseif_0x16f5 EQU 0x30e3
_page_0x31a0 EQU 0x31a0
_else_0x1738 EQU 0x31cb
_endif_0x1765 EQU 0x31f0
_page_0x32a0 EQU 0x32a0
_endif_0x178a EQU 0x32b9
_page_0x33a0 EQU 0x33a0
_endif_0x17ee EQU 0x33b7
_page_0x34a0 EQU 0x34a0
_else_0x1862 EQU 0x34bf
_endif_0x1866 EQU 0x34c3
_page_0x35a0 EQU 0x35a0
_elseif_0x18a9 EQU 0x35a4
_elseif_0x18ec EQU 0x35db
_page_0x36a0 EQU 0x36a0
_elseif_0x192f EQU 0x36bd
_else_0x1972 EQU 0x36f4
_page_0x37a0 EQU 0x37a0
_endif_0x199f EQU 0x37c3
_endif_0x19c4 EQU 0x37e0
_page_0x38a0 EQU 0x38a0
_endif_0x1a28 EQU 0x38de
_page_0x39a0 EQU 0x39a0
_else_0x1a9c EQU 0x39e4
_endif_0x1aa0 EQU 0x39e8
_page_0x3aa0 EQU 0x3aa0
_elseif_0x1ae3 EQU 0x3acb
_page_0x3ba0 EQU 0x3ba0
_elseif_0x1b26 EQU 0x3bac
_elseif_0x1b69 EQU 0x3be3
_page_0x3ca0 EQU 0x3ca0
_else_0x1bac EQU 0x3ccb
_endif_0x1bd9 EQU 0x3cf0
_page_0x3da0 EQU 0x3da0
_endif_0x1bfe EQU 0x3db9
_next_0x1c05 EQU 0x3dc0
_next_0x1c15 EQU 0x3dcc
_page_0x3ea0 EQU 0x3ea0
_endif_0x1c97 EQU 0x3ec8
_page_0x3fa0 EQU 0x3fa0
_page_0x40a0 EQU 0x40a0
_endif_0x1d65 EQU 0x40c9
_endif_0x1d8d EQU 0x40eb
_page_0x41a0 EQU 0x41a0
_endif_0x1db5 EQU 0x41bb
_endif_0x1ddd EQU 0x41dd
_page_0x42a0 EQU 0x42a0
_endif_0x1e04 EQU 0x42a8
_endif_0x1e2b EQU 0x42c9
_endif_0x1e53 EQU 0x42eb
_page_0x43a0 EQU 0x43a0
_endif_0x1e7b EQU 0x43bb
_endif_0x1e96 EQU 0x43d2
_next_0x1e9d EQU 0x43d9
_page_0x44a0 EQU 0x44a0
_endif_0x1f07 EQU 0x44c6
_page_0x45a0 EQU 0x45a0
_elseif_0x1f41 EQU 0x45a2
_elseif_0x1f6a EQU 0x45c3
_endif_0x1f8e EQU 0x45df
_next_0x1f95 EQU 0x45e6
_page_0x46a0 EQU 0x46a0
_endif_0x201f EQU 0x46e9
_page_0x47a0 EQU 0x47a0
_elseif_0x209f EQU 0x47f4
_page_0x48a0 EQU 0x48a0
_endif_0x20ed EQU 0x48d8
_page_0x49a0 EQU 0x49a0
_page_0x4aa0 EQU 0x4aa0
_endif_0x21c0 EQU 0x4ac0
_elseif_0x21fa EQU 0x4aee
_page_0x4ba0 EQU 0x4ba0
_endif_0x222c EQU 0x4bbe
_elseif_0x2266 EQU 0x4bec
_page_0x4ca0 EQU 0x4ca0
_endif_0x2298 EQU 0x4cbc
_endif_0x22bf EQU 0x4cdb
_page_0x4da0 EQU 0x4da0
_endif_0x231e EQU 0x4dcc
; Global Variables
_balance EQU 0x0030
_betAmount EQU 0x0032
_winAmount EQU 0x0034
_currentRound EQU 0x0036
_selectedCard EQU 0x0038
_pickedCard EQU 0x003a
_tempCard EQU 0x003c
_tempValue1 EQU 0x003e
_tempValue2 EQU 0x0040
_tempValue3 EQU 0x0042
_straightFlag EQU 0x0044
_flushFlag EQU 0x0046
_winType EQU 0x0048
_holdX EQU 0x004a
_inputDevice EQU 0x004c
_note EQU 0x004e
_notes EQU 0x0050
_index EQU 0x0052
_suit EQU 0x0054
_i EQU 0x0056
_j EQU 0x0058
_card0 EQU 0x005a
_card1 EQU 0x005c
_card2 EQU 0x005e
_card3 EQU 0x0060
_card4 EQU 0x0062
; Local Variables
; Arrays
_cardValue_array EQU 0x71cb
_cardValue_array DB 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
_cardSuit_array EQU 0x70cb
_cardSuit_array DB 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
_cardState_array EQU 0x6fcb
_cardState_array DB 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
_hand_array EQU 0x71c5
_hand_array DB 0x00 0x00 0x00 0x00 0x00 0x00
; Strings
; Constant Strings
_str_0x71af EQU 0x71af
_str_0x71af DB 20 'Game Over. Press (A)' 0
_str_0x70b0 EQU 0x70b0
_str_0x70b0 DB 25 ' ' 0
_str_0x71a4 EQU 0x71a4
_str_0x71a4 DB 9 ' ' 0
_str_0x70aa EQU 0x70aa
_str_0x70aa DB 4 'HELD' 0
_str_0x70a4 EQU 0x70a4
_str_0x70a4 DB 4 ' ' 0
_str_0x6fb9 EQU 0x6fb9
_str_0x6fb9 DB 16 'Royal Flush x250' 0
_str_0x6fab EQU 0x6fab
_str_0x6fab DB 12 'S.Flush x50' 0
_str_0x6ef2 EQU 0x6ef2
_str_0x6ef2 DB 12 '4-Kind x25' 0
_str_0x6ee5 EQU 0x6ee5
_str_0x6ee5 DB 11 'F.House x9' 0
_str_0x6ed8 EQU 0x6ed8
_str_0x6ed8 DB 11 'Flush x6' 0
_str_0x6ecb EQU 0x6ecb
_str_0x6ecb DB 11 'Straight x4' 0
_str_0x6ebe EQU 0x6ebe
_str_0x6ebe DB 11 '3-Kind x3' 0
_str_0x6eb1 EQU 0x6eb1
_str_0x6eb1 DB 11 'Two Pair x2' 0
_str_0x6ea4 EQU 0x6ea4
_str_0x6ea4 DB 11 'Jacks+ x1' 0
_str_0x6fa2 EQU 0x6fa2
_str_0x6fa2 DB 7 'Bal:000' 0
_str_0x6df8 EQU 0x6df8
_str_0x6df8 DB 6 'Bal:00' 0
_str_0x6df1 EQU 0x6df1
_str_0x6df1 DB 5 'Bal:0' 0
_str_0x6deb EQU 0x6deb
_str_0x6deb DB 4 'Bal:' 0
_str_0x6de5 EQU 0x6de5
_str_0x6de5 DB 4 'Win:' 0
_str_0x6ddf EQU 0x6ddf
_str_0x6ddf DB 4 'Bet:' 0
_str_0x7da2 EQU 0x7da2
_str_0x7da2 DB 1 'A' 0
_str_0x7ca2 EQU 0x7ca2
_str_0x7ca2 DB 1 'K' 0
_str_0x7ba2 EQU 0x7ba2
_str_0x7ba2 DB 1 'Q' 0
_str_0x7aa2 EQU 0x7aa2
_str_0x7aa2 DB 1 'J' 0
; Data
; Time
; Define Bytes
; Define Words
; Define Images
; Define Loader Image Chunks
; Define Sprites
def_sprites_0x7da5 EQU 0x7da5
def_sprites_0x7da5 DB 63 63 63 63 63 0 63 63 63 63 0 0 63 63 63 63 0 0 63 63 63 63 0 0 63 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 63 0 0 0 63 0 63 63 63 63 63 0 63 63 63 63 0 0 63 63 0 0 0 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x7ca5 EQU 0x7ca5
def_sprites_0x7ca5 DB 0 63 63 63 63 63 0 0 63 63 63 63 0 0 63 63 63 63 0 0 63 63 63 63 0 63 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 63 0 0 0 63 0 63 63 63 63 63 0 0 63 63 63 63 0 0 0 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x7ba5 EQU 0x7ba5
def_sprites_0x7ba5 DB 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x7aa5 EQU 0x7aa5
def_sprites_0x7aa5 DB 63 63 63 63 63 63 63 63 63 63 63 0 63 63 63 63 0 3 63 63 63 0 3 63 63 63 0 3 63 3 63 0 3 3 3 3 0 3 3 3 3 3 63 0 3 3 3 3 63 63 0 3 3 3 63 63 63 0 3 3 63 63 63 63 0 3 63 63 63 63 63 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x79a5 EQU 0x79a5
def_sprites_0x79a5 DB 0 63 63 63 63 63 3 0 63 63 63 63 3 3 0 63 63 63 3 3 3 0 63 63 3 3 3 3 0 63 3 3 3 3 3 0 3 3 3 3 3 3 3 3 3 3 3 0 3 3 3 3 0 63 3 3 3 0 63 63 3 3 0 63 63 63 3 0 63 63 63 63 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x78a5 EQU 0x78a5
def_sprites_0x78a5 DB 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x77a5 EQU 0x77a5
def_sprites_0x77a5 DB 63 63 0 0 0 63 63 0 3 3 3 0 0 3 63 63 3 3 0 3 63 3 3 3 0 3 3 3 3 3 0 3 3 3 3 3 63 0 3 3 3 3 63 63 0 3 3 3 63 63 63 0 3 3 63 63 63 63 0 3 63 63 63 63 63 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x76a5 EQU 0x76a5
def_sprites_0x76a5 DB 63 63 0 0 0 63 63 0 3 3 3 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 3 3 3 3 0 63 3 3 3 0 63 63 3 3 0 63 63 63 3 0 63 63 63 63 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x75a5 EQU 0x75a5
def_sprites_0x75a5 DB 63 63 63 63 63 63 63 63 63 63 63 63 0 63 63 63 63 63 0 63 63 63 63 63 0 63 63 63 63 63 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x74a5 EQU 0x74a5
def_sprites_0x74a5 DB 63 63 63 63 63 63 63 63 63 63 63 0 63 63 63 63 0 0 63 63 63 0 0 0 63 63 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 63 0 0 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 0 63 63 63 63 0 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x73a5 EQU 0x73a5
def_sprites_0x73a5 DB 0 63 63 63 63 63 0 0 63 63 63 63 0 0 0 63 63 63 0 0 0 0 63 63 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 63 63 0 0 0 0 63 63 63 0 0 0 63 63 63 63 63 0 0 63 63 63 63 0 0 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
def_sprites_0x72a5 EQU 0x72a5
def_sprites_0x72a5 DB 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 0 63 63 63 63 63 0 63 63 63 63 63 0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 241
; Define Fonts
; Lookup Tables
_spriteLut_0x6dd1 EQU 0x6dd1
_spriteLut_0x6dd1 DW 0x7da5 0x0000 0x7ca5 0x0006 0x7ba5 0x000c 0x0000
_spriteLut_0x6dc3 EQU 0x6dc3
_spriteLut_0x6dc3 DW 0x7aa5 0x0000 0x79a5 0x0006 0x78a5 0x000c 0x0000
_spriteLut_0x6db5 EQU 0x6db5
_spriteLut_0x6db5 DW 0x77a5 0x0000 0x76a5 0x0006 0x75a5 0x000c 0x0000
_spriteLut_0x6da7 EQU 0x6da7
_spriteLut_0x6da7 DW 0x74a5 0x0000 0x73a5 0x0006 0x72a5 0x000c 0x0000
_spritesLut_ EQU 0x6cf8
_spritesLut_ DW 0x6dd1 0x6dc3 0x6db5 0x6da7
; Code
_entryPoint_ LDI 0x28
STW romType
RomCheck
Initialise
InitEqOp
InitGtOp ; Main: INIT
ClearVertBlinds
LDI 2
STW graphicsMode
ScanlineMode ; Main: cls : mode 2
LD 0x21
ORI 3
ST 33 ; Main: poke &h21, peek(&h21) OR 3
SoundAllOff ; Main: sound off
ClearVertBlinds ; Main: cls
LDI 25
STW _balance ; Main: balance = 25
LDI 1
STW _betAmount ; Main: betAmount = 1
LDI 0
STW _winAmount ; Main: winAmount = 0
LDI 2
STW _currentRound ; Main: currentRound = DRAW
LDI 0
STW _selectedCard ; Main: selectedCard = 0
LDI 0
STW _pickedCard ; Main: pickedCard = 0
LDI 0
STW _tempCard ; Main: tempCard = 0
LDI 0
STW _tempValue1 ; Main: tempValue1 = 0
LDI 0
STW _tempValue2 ; Main: tempValue2 = 0
LDI 0
STW _tempValue3 ; Main: tempValue3 = 0
LDI 0
STW _straightFlag ; Main: straightFlag = 0
LDI 0
STW _flushFlag ; Main: flushFlag = 0
LDI 0
STW _winType ; Main: winType = NONE
LDI 0
STW _holdX ; Main: holdX = 0
LDI 255
STW _inputDevice ; Main: inputDevice = 255
LDWI _initCards
CALL giga_vAC ; Main: gosub initCards
LDI 16
ST fgbgColour ; Main: set BG_COLOUR, 16
LDI 16
ST fgbgColour + 1 ; Main: set FG_COLOUR, 16
LDI 3
STW drawRectF_x1
LDI 0
STW drawRectF_y1
LDI 156
STW drawRectF_x2
LDI 47
STW drawRectF_y2
DrawRectF ; Main: rectf 3, 0, 156, 47
LDI 63
ST fgbgColour + 1 ; Main: set FG_COLOUR, 63
LDI 3
STW drawRect_x1
LDI 0
STW drawRect_y1
LDI 156
STW drawRect_x2
LDI 47
STW drawRect_y2
DrawRect ; Main: rect 3, 0, 156, 47
LDWI _displayPayouts
CALL giga_vAC ; Main: gosub displayPayouts
LDWI _displayCardBacks
CALL giga_vAC ; Main: gosub displayCardBacks
LDWI _displayBalance
CALL giga_vAC ; Main: gosub displayBalance
LDWI _displayBet
CALL giga_vAC ; Main: gosub displayBet
_loop LDW _currentRound
XORI 0
JumpEQ _else_0x02e6 0 ; Main: if currentRound &= GAMEOVER
LDWI _gameOverInput
CALL giga_vAC
LDWI _endif_0x02eb
CALL giga_vAC ; Main: gosub gameOverInput
_else_0x02e6 LDWI _handleInput
CALL giga_vAC ; Main: gosub handleInput
_endif_0x02eb BRA _loop ; Main: goto &loop
_handleInput PUSH
LD giga_buttonState
STW _inputDevice ; Main: inputDevice = get("BUTTON_STATE")
LDW _inputDevice
STLW 0xFE
LDWI _page_0x0300
CALL giga_vAC
_page_0x0300 LDLW 0xFE
XORI 254
CALL convertEqOpAddr
STW 0xe8
LDW _currentRound
XORI 1
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _endif_0x033e 3 ; Main: if (inputDevice = 254) AND (currentRound = DEAL)
LDW _selectedCard
ADDI 1
STW _selectedCard ; Main: selectedCard = selectedCard + 1
LDW _selectedCard
XORI 5
JumpEQ _endif_0x0330 2 ; Main: if selectedCard &= 5
LDI 0
STW _selectedCard ; Main: selectedCard = 0
_endif_0x0330 LDWI _selectCard
CALL giga_vAC ; Main: gosub selectCard
LDI 10
STW waitVBlankNum
WaitVBlanks ; Main: wait 10
_endif_0x033e LDW _inputDevice
XORI 253
CALL convertEqOpAddr
STW 0xe8
LDW _currentRound
XORI 1
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _endif_0x0389 5 ; Main: if (inputDevice = 253) AND (currentRound = DEAL)
LDW _selectedCard
SUBI 1
STW _selectedCard ; Main: selectedCard = selectedCard - 1
LDWI -1
XORW _selectedCard
JumpEQ _endif_0x037b 4 ; Main: if selectedCard &= -1
LDI 4
STW _selectedCard ; Main: selectedCard = 4
_endif_0x037b LDWI _selectCard
CALL giga_vAC ; Main: gosub selectCard
LDI 10
STW waitVBlankNum
WaitVBlanks ; Main: wait 10
_endif_0x0389 LDW _inputDevice
XORI 247
CALL convertEqOpAddr
STW 0xe8
LDW _currentRound
XORI 2
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _endif_0x03d8 7 ; Main: if (inputDevice = 247) AND (currentRound = DRAW)
LDW _betAmount
ADDI 1
STW _betAmount ; Main: betAmount = betAmount + 1
LDW _betAmount
SUBI 5
JumpGT _endif_0x03c5 6 ; Main: if betAmount &> 5
LDI 1
STW _betAmount ; Main: betAmount = 1
_endif_0x03c5 LDWI _displayBet
CALL giga_vAC ; Main: gosub displayBet
LDWI _playSndBet
CALL giga_vAC ; Main: gosub playSndBet
LDI 10
STW waitVBlankNum
WaitVBlanks ; Main: wait 10
_endif_0x03d8 LDW _inputDevice
XORI 251
CALL convertEqOpAddr
STW 0xe8
LDW _currentRound
XORI 2
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _endif_0x0427 9 ; Main: if (inputDevice = 251) AND (currentRound = DRAW)
LDW _betAmount
SUBI 1
STW _betAmount ; Main: betAmount = betAmount - 1
LDW _betAmount
SUBI 1
JumpLT _endif_0x0414 8 ; Main: if betAmount &< 1
LDI 5
STW _betAmount ; Main: betAmount = 5
_endif_0x0414 LDWI _displayBet
CALL giga_vAC ; Main: gosub displayBet
LDWI _playSndBet
CALL giga_vAC ; Main: gosub playSndBet
STLW 0xFE
LDWI _page_0x0400
CALL giga_vAC
_page_0x0400 LDLW 0xFE
LDI 10
STW waitVBlankNum
WaitVBlanks ; Main: wait 10
_endif_0x0427 LDW _inputDevice
XORI 191
JumpEQ _endif_0x04dc 14 ; Main: if inputDevice &= 191
LDW _currentRound
XORI 1
JumpEQ _else_0x0473 10 ; Main: if currentRound &= DEAL
LDI 2
STW _currentRound ; Main: currentRound = DRAW
LDWI -1
STW _selectedCard ; Main: selectedCard = -1
LDWI _selectCard
CALL giga_vAC ; Main: gosub selectCard
LDWI _drawCards
CALL giga_vAC ; Main: gosub drawCards
LDWI _displayCards
CALL giga_vAC ; Main: gosub displayCards
LDWI _checkHand
CALL giga_vAC ; Main: gosub checkHand
LDWI _updateBalance
CALL giga_vAC ; Main: gosub updateBalance
LDWI _displayPayouts
CALL giga_vAC
LDWI _endif_0x04d3
CALL giga_vAC ; Main: gosub displayPayouts
_else_0x0473 LDI 1
STW _currentRound ; Main: currentRound = DEAL
LDI 0
STW _winType ; Main: winType = NONE
LDWI _clearHand
CALL giga_vAC ; Main: gosub clearHand
LDWI _displayCardBacks
CALL giga_vAC ; Main: gosub displayCardBacks
LDW _betAmount
SUBW _balance
JumpGT _endif_0x049e 11 ; Main: if betAmount &> balance
LDW _balance
STW _betAmount ; Main: betAmount = balance
LDWI _displayBet
CALL giga_vAC ; Main: gosub displayBet
_endif_0x049e LDW _balance
SUBW _betAmount
STW _balance ; Main: balance = balance - betAmount
LDW _balance
JumpLT _endif_0x04ba 12 ; Main: if balance &< 0
LDI 0
STW _balance ; Main: balance = 0
_endif_0x04ba LDWI _displayBalance
CALL giga_vAC ; Main: gosub displayBalance
LDWI _displayPayouts
CALL giga_vAC ; Main: gosub displayPayouts
LDWI _dealCards
CALL giga_vAC ; Main: gosub dealCards
LDWI _displayCards
CALL giga_vAC ; Main: gosub displayCards
LDWI _selectCard
CALL giga_vAC ; Main: gosub selectCard
_endif_0x04d3 LDI 10
STW waitVBlankNum
WaitVBlanks ; Main: wait 10
_endif_0x04dc LDW _inputDevice
XORI 127
CALL convertEqOpAddr
STW 0xe8
LDW _currentRound
XORI 1
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _endif_0x050a 15 ; Main: if (inputDevice = 127) AND (currentRound = DEAL)
LDWI _holdCard
CALL giga_vAC ; Main: gosub holdCard
LDI 10
STW waitVBlankNum
WaitVBlanks ; Main: wait 10
_endif_0x050a Return ; Main: return
_gameOverInput PUSH
LD giga_buttonState
STW _inputDevice ; Main: inputDevice = get("BUTTON_STATE")
LDW _inputDevice
XORI 127
JumpEQ _endif_0x053a 16 ; Main: if inputDevice &= 127
LDI 25
STW _balance ; Main: balance = 25
LDWI _clearHand
CALL giga_vAC ; Main: gosub clearHand
LDWI _displayCardBacks
CALL giga_vAC ; Main: gosub displayCardBacks
STLW 0xFE
LDWI _page_0x0500
CALL giga_vAC
_page_0x0500 LDLW 0xFE
LDWI _displayBalance
CALL giga_vAC ; Main: gosub displayBalance
LDI 2
STW _currentRound ; Main: currentRound = DRAW
_endif_0x053a Return ; Main: return
_displayGameOver PUSH
LDI 63
ST fgbgColour + 1 ; Main: set FG_COLOUR, 63
LDI 3
ST fgbgColour ; Main: set BG_COLOUR, 3
LDI 20
ST cursorXY
LDI 51
ST cursorXY + 1
AtTextCursor
PrintString _str_0x71af
NewLine ; Main: at 20,holdY : print "Game Over. Press (A)"
LDWI _playSndUnHold
CALL giga_vAC ; Main: gosub playSndUnHold
Return ; Main: return
_playSndCardFlip PUSH
LDI 0
STW _note
STW _notes ; Main: note = 0 : notes = note
LDI 40
STW _index ; Main: index = 40
LDI 2
ST giga_soundTimer ; Main: set SOUND_TIMER, 2
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
LDI 2
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 2
LDI 45
STW _index ; Main: index = 45
LDI 2
ST giga_soundTimer ; Main: set SOUND_TIMER, 2
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
Return ; Main: return
_playSndHold PUSH
LDI 0
STW _note
STW _notes ; Main: note = 0 : notes = note
LDI 40
STW _index ; Main: index = 40
LDI 4
ST giga_soundTimer ; Main: set SOUND_TIMER, 4
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
LDI 4
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 4
LDI 45
STW _index ; Main: index = 45
LDI 4
ST giga_soundTimer ; Main: set SOUND_TIMER, 4
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
Return ; Main: return
_playSndUnHold PUSH
LDI 0
STW _note
STW _notes ; Main: note = 0 : notes = note
LDI 45
STW _index ; Main: index = 45
LDI 4
ST giga_soundTimer ; Main: set SOUND_TIMER, 4
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
LDI 4
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 4
LDI 40
STW _index ; Main: index = 40
LDI 4
ST giga_soundTimer ; Main: set SOUND_TIMER, 4
STLW 0xFE
LDWI _page_0x0600
CALL giga_vAC
_page_0x0600 LDLW 0xFE
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
Return ; Main: return
_playSndBet PUSH
LDI 0
STW _note
STW _notes ; Main: note = 0 : notes = note
LDW _betAmount
ADDI 60
STW _index ; Main: index = betAmount + 60
LDI 5
ST giga_soundTimer ; Main: set SOUND_TIMER, 5
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
Return ; Main: return
_playSndWin PUSH
LDI 10
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 10
LDI 0
STW _note
STW _notes ; Main: note = 0 : notes = note
LDI 60
STW _index ; Main: index = 60
LDI 4
ST giga_soundTimer ; Main: set SOUND_TIMER, 4
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
LDI 8
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 8
LDI 2
ST giga_soundTimer ; Main: set SOUND_TIMER, 2
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
LDI 4
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 4
LDI 65
STW _index ; Main: index = 65
LDI 20
ST giga_soundTimer ; Main: set SOUND_TIMER, 20
LDWI _getRomNote
CALL giga_vAC ; Main: gosub getRomNote
LDI 1
ST sndChannel + 1
LDW _note
STW sndFrequency
SoundOn ; Main: sound on, 1, note
LDI 20
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 20
Return ; Main: return
_getRomNote PUSH ; Main: asm
LDWI 0x0900 ; Main: LDWI 0x0900
ADDW _index ; Main: ADDW _index
ADDW _index ; Main: ADDW _index
STW _notes ; Main: STW _notes
LUP 0 ; Main: LUP 0
ST _note ; Main: ST _note
LDW _notes ; Main: LDW _notes
LUP 1 ; Main: LUP 1
ST _note+1 ; Main: ST _note + 1
Return ; Main: return
_initCards PUSH
LDI 0
STW _suit ; Main: suit = 0
LDI 0
STW _i ; Main: for i = 0 to 51
_next_0x0701 LDWI 0x70cb
ADDW _i
STW memAddr
LDW _suit
POKE memAddr ; Main: cardSuit(i) = suit
LDW _i
STW mathX
LDI 13
STW mathY
LDWI divide16bit
CALL giga_vAC
LDW mathRem
ADDI 2
STW memValue
LDWI 0x71cb
ADDW _i
STW memAddr
LDW memValue
STLW 0xFE
LDWI _page_0x08a0
CALL giga_vAC
_page_0x08a0 LDLW 0xFE
POKE memAddr ; Main: cardValue(i) = 2+(i%13)
LDWI 0x6fcb
ADDW _i
STW memAddr
LDI 0
POKE memAddr ; Main: cardState(i) = INDECK
LDW _i
STW mathX
LDI 13
STW mathY
LDWI divide16bit
CALL giga_vAC
LDW mathRem
ADDI 2
XORI 14
JumpEQ _endif_0x077e 17 ; Main: if(2+(i%13) &= 14)
LDW _suit
ADDI 1
STW _suit ; Main: suit = suit + 1
_endif_0x077e ForNextFarInc _i _next_0x0701 51 ; Main: next i
Return ; Main: return
_clearHand PUSH
LDI 0
STW _i ; Main: for i = 0 to 51
_next_0x0793 LDWI 0x6fcb
ADDW _i
STW memAddr
LDI 0
POKE memAddr ; Main: cardState(i) = INDECK
STLW 0xFE
LDWI _page_0x09a0
CALL giga_vAC
_page_0x09a0 LDLW 0xFE
ForNextFarInc _i _next_0x0793 51 ; Main: next i
LDI 32
ST fgbgColour + 1 ; Main: set FG_COLOUR, 32
LDI 32
ST fgbgColour ; Main: set BG_COLOUR, 32
LDI 0
STW _selectedCard ; Main: selectedCard = 0
LDI 7
ST cursorXY
LDI 51
ST cursorXY + 1
AtTextCursor
PrintString _str_0x70b0
NewLine ; Main: at 7,holdY : print " "
LDI 0
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
PrintString _str_0x71a4
NewLine ; Main: at 0,110 : print " "
Return ; Main: return
_dealCards PUSH
STLW 0xFE
LDWI _page_0x0aa0
CALL giga_vAC
_page_0x0aa0 LDLW 0xFE
LDI 0
STW _i ; Main: for i = 0 to 4
_retry1 LDI 0x34
RandMod
STW _pickedCard ; Main: pickedCard = rnd(52)
LDWI 0x6fcb
ADDW _pickedCard
PEEK
XORI 0
JumpEQ _else_0x0853 18 ; Main: if(cardState(pickedCard) &= INDECK)
LDWI 0x71c5
ADDW _i
STW memAddr
LDW _pickedCard
POKE memAddr ; Main: hand(i) = pickedCard
LDWI 0x6fcb
ADDW _pickedCard
STW memAddr
LDI 1
POKE memAddr
LDWI _endif_0x0858
CALL giga_vAC ; Main: cardState(pickedCard) = DRAWN
_else_0x0853 LDWI _retry1
CALL giga_vAC ; Main: goto retry1
_endif_0x0858 ForNextFarInc _i _retry1 4 ; Main: next i
LDI 0
STW _selectedCard ; Main: selectedCard = 0
Return ; Main: return
_cheatDeal LDWI 0x71c5
STLW 0xFE
LDWI _page_0x0ba0
CALL giga_vAC
_page_0x0ba0 LDLW 0xFE
STW memAddr
LDI 12
POKE memAddr ; Main: hand(0) = 12
LDWI 0x6fd7
STW memAddr
LDI 1
POKE memAddr ; Main: cardState(12) = DRAWN
LDWI 0x71c6
STW memAddr
LDI 11
POKE memAddr ; Main: hand(1) = 11
LDWI 0x6fd6
STW memAddr
LDI 1
POKE memAddr ; Main: cardState(11) = DRAWN
LDWI 0x71c7
STW memAddr
LDI 10
POKE memAddr ; Main: hand(2) = 10
LDWI 0x6fd5
STW memAddr
LDI 1
POKE memAddr ; Main: cardState(10) = DRAWN
LDWI 0x71c8
STW memAddr
LDI 8
POKE memAddr ; Main: hand(3) = 8
LDWI 0x6fd3
STW memAddr
LDI 1
POKE memAddr ; Main: cardState(8) = DRAWN
LDWI 0x71c9
STW memAddr
LDI 9
POKE memAddr ; Main: hand(4) = 9
LDWI 0x6fd4
STW memAddr
LDI 1
STLW 0xFE
LDWI _page_0x0ca0
CALL giga_vAC
_page_0x0ca0 LDLW 0xFE
POKE memAddr ; Main: cardState(9) = DRAWN
LDI 0
STW _selectedCard ; Main: selectedCard = 0
Return ; Main: return
_drawCards PUSH
LDI 0
STW _i ; Main: for i = 0 to 4
_next_0x08f9 LDWI 0x71c5
ADDW _i
PEEK
STW _tempCard ; Main: tempCard = hand(i)
LDWI 0x6fcb
ADDW _tempCard
PEEK
XORI 1
JumpEQ _endif_0x098f 22 ; Main: if(cardState(tempCard) &= DRAWN)
_retry2 LDI 0x34
RandMod
STW _pickedCard ; Main: pickedCard = rnd(52)
LDWI 0x6fcb
ADDW _pickedCard
PEEK
XORI 0
JumpEQ _else_0x098a 20 ; Main: if(cardState(pickedCard) &= INDECK)
LDWI 0x6fcb
ADDW _tempCard
STW memAddr
LDI 3
POKE memAddr ; Main: cardState(tempCard) = DISCARDED
LDWI 0x71c5
ADDW _i
STW memAddr
LDW _pickedCard
POKE memAddr ; Main: hand(i) = pickedCard
STLW 0xFE
LDWI _page_0x0da0
CALL giga_vAC
_page_0x0da0 LDLW 0xFE
LDWI 0x6fcb
ADDW _pickedCard
STW memAddr
LDI 1
POKE memAddr
LDWI _endif_0x098f
CALL giga_vAC ; Main: cardState(pickedCard) = DRAWN
_else_0x098a LDWI _retry2
CALL giga_vAC ; Main: goto retry2
_endif_0x098f ForNextFarInc _i _next_0x08f9 4 ; Main: next i
Return ; Main: return
_selectCard PUSH
LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
LDI 3
STW drawRect_x1
LDI 60
STW drawRect_y1
LDI 32
STW drawRect_x2
LDI 107
STW drawRect_y2
DrawRect ; Main: rect 3, cardBorderY, 32, cardBorderY2
LDI 34
STW drawRect_x1
LDI 60
STW drawRect_y1
LDI 63
STW drawRect_x2
LDI 107
STW drawRect_y2
DrawRect ; Main: rect 34, cardBorderY, 63, cardBorderY2
LDI 65
STLW 0xFE
LDWI _page_0x0ea0
CALL giga_vAC
_page_0x0ea0 LDLW 0xFE
STW drawRect_x1
LDI 60
STW drawRect_y1
LDI 94
STW drawRect_x2
LDI 107
STW drawRect_y2
DrawRect ; Main: rect 65, cardBorderY, 94, cardBorderY2
LDI 96
STW drawRect_x1
LDI 60
STW drawRect_y1
LDI 125
STW drawRect_x2
LDI 107
STW drawRect_y2
DrawRect ; Main: rect 96, cardBorderY, 125, cardBorderY2
LDI 127
STW drawRect_x1
LDI 60
STW drawRect_y1
LDI 156
STW drawRect_x2
LDI 107
STW drawRect_y2
DrawRect ; Main: rect 127, cardBorderY, 156, cardBorderY2
LDI 3
ST fgbgColour + 1 ; Main: set FG_COLOUR, 3
LDW _selectedCard
XORI 0
JumpEQ _elseif_0x0a3b 23 ; Main: if selectedCard &= 0
LDI 3
STW drawRect_x1
LDI 60
STW drawRect_y1
STLW 0xFE
LDWI _page_0x0fa0
CALL giga_vAC
_page_0x0fa0 LDLW 0xFE
LDI 32
STW drawRect_x2
LDI 107
STW drawRect_y2
DrawRect
LDWI _endif_0x0ade
CALL giga_vAC ; Main: rect 3, cardBorderY, 32, cardBorderY2
_elseif_0x0a3b LDW _selectedCard
XORI 1
JumpEQ _elseif_0x0a65 24 ; Main: elseif selectedCard &= 1
LDI 34
STW drawRect_x1
LDI 60
STW drawRect_y1
LDI 63
STW drawRect_x2
LDI 107
STW drawRect_y2
DrawRect
LDWI _endif_0x0ade
CALL giga_vAC ; Main: rect 34, cardBorderY, 63, cardBorderY2
_elseif_0x0a65 LDW _selectedCard
XORI 2
JumpEQ _elseif_0x0a8f 25 ; Main: elseif selectedCard &= 2
LDI 65
STW drawRect_x1
LDI 60
STW drawRect_y1
LDI 94
STW drawRect_x2
LDI 107
STW drawRect_y2
STLW 0xFE
LDWI _page_0x10a0
CALL giga_vAC
_page_0x10a0 LDLW 0xFE
DrawRect
LDWI _endif_0x0ade
CALL giga_vAC ; Main: rect 65, cardBorderY, 94, cardBorderY2
_elseif_0x0a8f LDW _selectedCard
XORI 3
JumpEQ _elseif_0x0ab9 26 ; Main: elseif selectedCard &= 3
LDI 96
STW drawRect_x1
LDI 60
STW drawRect_y1
LDI 125
STW drawRect_x2
LDI 107
STW drawRect_y2
DrawRect
LDWI _endif_0x0ade
CALL giga_vAC ; Main: rect 96, cardBorderY, 125, cardBorderY2
_elseif_0x0ab9 LDW _selectedCard
XORI 4
JumpEQ _endif_0x0ade 27 ; Main: elseif selectedCard &= 4
LDI 127
STW drawRect_x1
LDI 60
STW drawRect_y1
LDI 156
STW drawRect_x2
LDI 107
STW drawRect_y2
DrawRect ; Main: rect 127, cardBorderY, 156, cardBorderY2
_endif_0x0ade Return ; Main: return
_holdCard PUSH
LDI 31
STLW 0xFE
LDWI _page_0x11a0
CALL giga_vAC
_page_0x11a0 LDLW 0xFE
ST fgbgColour + 1 ; Main: set FG_COLOUR, 31
LDI 32
ST fgbgColour ; Main: set BG_COLOUR, 32
LDW _selectedCard
XORI 0
JumpEQ _elseif_0x0b02 28 ; Main: if selectedCard &= 0
LDI 7
STW _holdX
LDWI _endif_0x0b61
CALL giga_vAC ; Main: holdX = 7
_elseif_0x0b02 LDW _selectedCard
XORI 1
JumpEQ _elseif_0x0b1b 29 ; Main: elseif selectedCard &= 1
LDI 38
STW _holdX
LDWI _endif_0x0b61
CALL giga_vAC ; Main: holdX = 38
_elseif_0x0b1b LDW _selectedCard
XORI 2
JumpEQ _elseif_0x0b34 30 ; Main: elseif selectedCard &= 2
LDI 69
STW _holdX
LDWI _endif_0x0b61
CALL giga_vAC ; Main: holdX = 69
_elseif_0x0b34 LDW _selectedCard
XORI 3
JumpEQ _elseif_0x0b4d 31 ; Main: elseif selectedCard &= 3
LDI 100
STW _holdX
STLW 0xFE
LDWI _page_0x12a0
CALL giga_vAC
_page_0x12a0 LDLW 0xFE
LDWI _endif_0x0b61
CALL giga_vAC ; Main: holdX = 100
_elseif_0x0b4d LDW _selectedCard
XORI 4
JumpEQ _endif_0x0b61 32 ; Main: elseif selectedCard &= 4
LDI 131
STW _holdX ; Main: holdX = 131
_endif_0x0b61 LDWI 0x71c5
ADDW _selectedCard
PEEK
STW _tempCard ; Main: tempCard = hand(selectedCard)
LDWI 0x6fcb
ADDW _tempCard
PEEK
XORI 1
JumpEQ _elseif_0x0bc4 33 ; Main: if cardState(tempCard) &= DRAWN
LDWI 0x6fcb
ADDW _tempCard
STW memAddr
LDI 2
POKE memAddr ; Main: cardState(tempCard) = HELD
LDW _holdX
ST cursorXY
LDI 51
ST cursorXY + 1
AtTextCursor
PrintString _str_0x70aa
NewLine ; Main: at holdX,holdY : print "HELD"
STLW 0xFE
LDWI _page_0x13a0
CALL giga_vAC
_page_0x13a0 LDLW 0xFE
LDWI _playSndHold
CALL giga_vAC
LDWI _endif_0x0c14
CALL giga_vAC ; Main: gosub playSndHold
_elseif_0x0bc4 LDWI 0x6fcb
ADDW _tempCard
PEEK
XORI 2
JumpEQ _endif_0x0c14 34 ; Main: elseif cardState(tempCard) &= HELD
LDWI 0x6fcb
ADDW _tempCard
STW memAddr
LDI 1
POKE memAddr ; Main: cardState(tempCard) = DRAWN
LDW _holdX
ST cursorXY
LDI 51
ST cursorXY + 1
AtTextCursor
PrintString _str_0x70a4
NewLine ; Main: at holdX,holdY : print " "
LDWI _playSndUnHold
CALL giga_vAC ; Main: gosub playSndUnHold
_endif_0x0c14 Return ; Main: return
_displayPayouts PUSH
LDI 16
ST fgbgColour ; Main: set BG_COLOUR, 16
LDI 42
ST fgbgColour + 1 ; Main: set FG_COLOUR, 42
LDW _winType
XORI 10
STLW 0xFE
LDWI _page_0x14a0
CALL giga_vAC
_page_0x14a0 LDLW 0xFE
JumpEQ _endif_0x0c33 35 ; Main: if winType &= ROYALFLUSH
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
_endif_0x0c33 LDI 32
ST cursorXY
LDI 2
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6fb9
NewLine ; Main: at 32,2 : print "Royal Flush x250"
LDI 42
ST fgbgColour + 1 ; Main: set FG_COLOUR, 42
LDW _winType
XORI 9
JumpEQ _endif_0x0c67 36 ; Main: if winType &= STRAIGHTFLUSH
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
_endif_0x0c67 LDI 5
ST cursorXY
LDI 11
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6fab
STLW 0xFE
LDWI _page_0x15a0
CALL giga_vAC
_page_0x15a0 LDLW 0xFE
NewLine ; Main: at 5,11 : print "S.Flush x50"
LDI 42
ST fgbgColour + 1 ; Main: set FG_COLOUR, 42
LDW _winType
XORI 7
JumpEQ _endif_0x0c9b 37 ; Main: if winType &= FOUROFAKIND
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
_endif_0x0c9b LDI 5
ST cursorXY
LDI 20
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6ef2
NewLine ; Main: at 5,20 : print "4-Kind x25"
LDI 42
ST fgbgColour + 1 ; Main: set FG_COLOUR, 42
LDW _winType
XORI 6
JumpEQ _endif_0x0ccf 38 ; Main: if winType &= FULLHOUSE
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
_endif_0x0ccf LDI 5
ST cursorXY
LDI 29
ST cursorXY + 1
AtTextCursor
STLW 0xFE
LDWI _page_0x16a0
CALL giga_vAC
_page_0x16a0 LDLW 0xFE
PrintString _str_0x6ee5
NewLine ; Main: at 5,29 : print "F.House x9"
LDI 42
ST fgbgColour + 1 ; Main: set FG_COLOUR, 42
LDW _winType
XORI 5
JumpEQ _endif_0x0d03 39 ; Main: if winType &= FLUSH
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
_endif_0x0d03 LDI 5
ST cursorXY
LDI 38
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6ed8
NewLine ; Main: at 5,38 : print "Flush x6"
LDI 42
ST fgbgColour + 1 ; Main: set FG_COLOUR, 42
LDW _winType
XORI 4
JumpEQ _endif_0x0d37 40 ; Main: if winType &= STRAIGHT
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
_endif_0x0d37 LDI 90
STLW 0xFE
LDWI _page_0x17a0
CALL giga_vAC
_page_0x17a0 LDLW 0xFE
ST cursorXY
LDI 11
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6ecb
NewLine ; Main: at 90,11 : print "Straight x4"
LDI 42
ST fgbgColour + 1 ; Main: set FG_COLOUR, 42
LDW _winType
XORI 3
JumpEQ _endif_0x0d6b 41 ; Main: if winType &= THREEOFAKIND
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
_endif_0x0d6b LDI 90
ST cursorXY
LDI 20
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6ebe
NewLine ; Main: at 90,20 : print "3-Kind x3"
LDI 42
ST fgbgColour + 1 ; Main: set FG_COLOUR, 42
LDW _winType
XORI 2
STLW 0xFE
LDWI _page_0x18a0
CALL giga_vAC
_page_0x18a0 LDLW 0xFE
JumpEQ _endif_0x0d9f 42 ; Main: if winType &= TWOPAIR
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
_endif_0x0d9f LDI 90
ST cursorXY
LDI 29
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6eb1
NewLine ; Main: at 90,29 : print "Two Pair x2"
LDI 42
ST fgbgColour + 1 ; Main: set FG_COLOUR, 42
LDW _winType
XORI 1
JumpEQ _endif_0x0dd3 43 ; Main: if winType &= JACKSORBETTER
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
_endif_0x0dd3 LDI 90
ST cursorXY
LDI 38
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6ea4
STLW 0xFE
LDWI _page_0x19a0
CALL giga_vAC
_page_0x19a0 LDLW 0xFE
NewLine ; Main: at 90,38 : print "Jacks+ x1"
Return ; Main: return
_displayBalance PUSH
LDI 32
ST fgbgColour ; Main: set BG_COLOUR, 32
LDI 63
ST fgbgColour + 1 ; Main: set FG_COLOUR, 63
LDW _balance
SUBI 10
JumpLT _elseif_0x0e46 44 ; Main: if balance &< 10
LDI 106
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6fa2
NewLine ; Main: at 106,110 : print "Bal:000"
LDI 148
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
LDW _balance
PrintAcInt16
NewLine
LDWI _endif_0x0f16
STLW 0xFE
LDWI _page_0x1aa0
CALL giga_vAC
_page_0x1aa0 LDLW 0xFE
CALL giga_vAC ; Main: at 148,110 : print balance
_elseif_0x0e46 LDW _balance
SUBI 100
JumpLT _elseif_0x0e92 45 ; Main: elseif balance &< 100
LDI 106
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6df8
NewLine ; Main: at 106,110 : print "Bal:00"
LDI 142
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
LDW _balance
PrintAcInt16
NewLine
LDWI _endif_0x0f16
CALL giga_vAC ; Main: at 142,110 : print balance
_elseif_0x0e92 LDWI 999
SUBW _balance
STLW 0xFE
LDWI _page_0x1ba0
CALL giga_vAC
_page_0x1ba0 LDLW 0xFE
JumpGE _else_0x0edf 46 ; Main: elseif balance &< 999
LDI 106
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6df1
NewLine ; Main: at 106,110 : print "Bal:0"
LDI 136
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
LDW _balance
PrintAcInt16
NewLine
LDWI _endif_0x0f16
CALL giga_vAC ; Main: at 136,110 : print balance
_else_0x0edf LDI 106
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
STLW 0xFE
LDWI _page_0x1ca0
CALL giga_vAC
_page_0x1ca0 LDLW 0xFE
PrintString _str_0x6deb
NewLine ; Main: at 106,110 : print "Bal:"
LDI 130
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
LDW _balance
PrintAcInt16
NewLine ; Main: at 130,110 : print balance
_endif_0x0f16 Return ; Main: return
_updateBalance PUSH
LDW _winAmount
JumpGT _endif_0x0f94 49 ; Main: if winAmount &> 0
LDI 3
ST fgbgColour ; Main: set BG_COLOUR, 3
LDI 15
ST fgbgColour + 1 ; Main: set FG_COLOUR, 15
LDI 3
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6de5
STLW 0xFE
LDWI _page_0x1da0
CALL giga_vAC
_page_0x1da0 LDLW 0xFE
NewLine ; Main: at 3,110 : print "Win:"
LDI 26
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
LDW _winAmount
PrintAcInt16
NewLine ; Main: at 26,110 : print winAmount
LDW _balance
ADDW _winAmount
STW _balance ; Main: balance = balance + winAmount
LDWI 9999
SUBW _balance
JumpLE _endif_0x0f86 48 ; Main: if balance &> 9999
LDWI 9999
STW _balance ; Main: balance = 9999
_endif_0x0f86 LDI 0
STW _winAmount ; Main: winAmount = 0
LDWI _displayBalance
CALL giga_vAC ; Main: gosub displayBalance
LDWI _playSndWin
CALL giga_vAC ; Main: gosub playSndWin
_endif_0x0f94 LDW _balance
SUBI 1
JumpLT _endif_0x0fb2 50 ; Main: if balance &< 1
LDI 0
STW _currentRound ; Main: currentRound = GAMEOVER
STLW 0xFE
LDWI _page_0x1ea0
CALL giga_vAC
_page_0x1ea0 LDLW 0xFE
LDWI _clearHand
CALL giga_vAC ; Main: gosub clearHand
LDWI _displayGameOver
CALL giga_vAC ; Main: gosub displayGameOver
_endif_0x0fb2 Return ; Main: return
_displayBet PUSH
LDI 32
ST fgbgColour ; Main: set BG_COLOUR, 32
LDI 63
ST fgbgColour + 1 ; Main: set FG_COLOUR, 63
LDI 57
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
PrintString _str_0x6ddf
NewLine ; Main: at 57,110 : print "Bet:"
LDI 80
ST cursorXY
LDI 110
ST cursorXY + 1
AtTextCursor
LDW _betAmount
PrintAcInt16
NewLine ; Main: at 80,110 : print betAmount
Return ; Main: return
_displayCardBacks PUSH
LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
LDI 3
STLW 0xFE
LDWI _page_0x1fa0
CALL giga_vAC
_page_0x1fa0 LDLW 0xFE
STW drawRectF_x1
LDI 60
STW drawRectF_y1
LDI 32
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 3, cardBorderY, 32, cardBorderY2
LDI 34
STW drawRectF_x1
LDI 60
STW drawRectF_y1
LDI 63
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 34, cardBorderY, 63, cardBorderY2
LDI 65
STW drawRectF_x1
LDI 60
STW drawRectF_y1
LDI 94
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 65, cardBorderY, 94, cardBorderY2
LDI 96
STW drawRectF_x1
LDI 60
STW drawRectF_y1
LDI 125
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 96, cardBorderY, 125, cardBorderY2
LDI 127
STW drawRectF_x1
STLW 0xFE
LDWI _page_0x20a0
CALL giga_vAC
_page_0x20a0 LDLW 0xFE
LDI 60
STW drawRectF_y1
LDI 156
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 127, cardBorderY, 156, cardBorderY2
LDI 21
ST fgbgColour + 1 ; Main: set FG_COLOUR, 21
LDI 4
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 31
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 4, cardY, 31, cardY2
LDI 35
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 62
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 35, cardY, 62, cardY2
LDI 66
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 93
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 66, cardY, 93, cardY2
LDI 97
STLW 0xFE
LDWI _page_0x21a0
CALL giga_vAC
_page_0x21a0 LDLW 0xFE
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 124
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 97, cardY, 124, cardY2
LDI 128
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 155
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 128, cardY, 155, cardY2
Return ; Main: return
_displayCards PUSH
LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
LDI 63
ST fgbgColour ; Main: set BG_COLOUR, 63
LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x6fcb
ADDW memIndex0
PEEK
XORI 1
JumpEQ _endif_0x1316 59 ; Main: if cardState(hand(0)) &= DRAWN
LDW _currentRound
XORI 2
JumpEQ _endif_0x1140 51 ; Main: if currentRound &= DRAW
STLW 0xFE
LDWI _page_0x22a0
CALL giga_vAC
_page_0x22a0 LDLW 0xFE
LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
LDI 3
STW drawRectF_x1
LDI 60
STW drawRectF_y1
LDI 32
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 3, cardBorderY, 32, cardBorderY2
LDI 21
ST fgbgColour + 1 ; Main: set FG_COLOUR, 21
LDI 4
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 31
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 4, cardY, 31, cardY2
_endif_0x1140 LDI 8
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 8
LDWI _playSndCardFlip
CALL giga_vAC ; Main: gosub playSndCardFlip
LDI 63
ST fgbgColour + 1 ; Main: set FG_COLOUR, 63
LDI 4
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 31
STW drawRectF_x2
LDI 106
STW drawRectF_y2
STLW 0xFE
LDWI _page_0x23a0
CALL giga_vAC
_page_0x23a0 LDLW 0xFE
DrawRectF ; Main: rectf 4, cardY, 31, cardY2
LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 2
CALL convertEqOpAddr
STW 0xea
LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 1
CALL convertEqOpAddr
ORW 0xea
JumpFalse _else_0x11b4 52 ; Main: if (cardSuit(hand(0)) = HEARTS) OR (cardSuit(hand(0)) = DIAMONDS)
LDI 3
ST fgbgColour + 1
LDWI _endif_0x11b8
CALL giga_vAC ; Main: set FG_COLOUR, 3
_else_0x11b4 LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
_endif_0x11b8 LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 14
JumpEQ _elseif_0x11fb 54 ; Main: if cardValue(hand(0)) &= 14
LDI 7
STLW 0xFE
LDWI _page_0x24a0
CALL giga_vAC
_page_0x24a0 LDLW 0xFE
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7da2
NewLine
LDWI _endif_0x12f1
CALL giga_vAC ; Main: at 7,cardValueY : print "A"
_elseif_0x11fb LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 13
JumpEQ _elseif_0x123e 55 ; Main: elseif cardValue(hand(0)) &= 13
LDI 7
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7ca2
NewLine
LDWI _endif_0x12f1
CALL giga_vAC ; Main: at 7,cardValueY : print "K"
STLW 0xFE
LDWI _page_0x25a0
CALL giga_vAC
_page_0x25a0 LDLW 0xFE
_elseif_0x123e LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 12
JumpEQ _elseif_0x1281 56 ; Main: elseif cardValue(hand(0)) &= 12
LDI 7
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7ba2
NewLine
LDWI _endif_0x12f1
CALL giga_vAC ; Main: at 7,cardValueY : print "Q"
_elseif_0x1281 LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 11
JumpEQ _else_0x12c4 57 ; Main: elseif cardValue(hand(0)) &= 11
LDI 7
ST cursorXY
LDI 63
ST cursorXY + 1
STLW 0xFE
LDWI _page_0x26a0
CALL giga_vAC
_page_0x26a0 LDLW 0xFE
AtTextCursor
PrintString _str_0x7aa2
NewLine
LDWI _endif_0x12f1
CALL giga_vAC ; Main: at 7,cardValueY : print "J"
_else_0x12c4 LDI 7
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
PrintAcInt16
NewLine ; Main: at 7,cardValueY : print cardValue(hand(0))
_endif_0x12f1 LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
STW spriteId
LDI 11
ST spriteXY
LDI 78
ADDI 8
ST spriteXY + 1
STLW 0xFE
LDWI _page_0x27a0
CALL giga_vAC
_page_0x27a0 LDLW 0xFE
DrawSprite ; Main: sprite noFlip, cardSuit(hand(0)), 11, cardSuitY
_endif_0x1316 LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x6fcb
ADDW memIndex0
PEEK
XORI 1
JumpEQ _endif_0x1550 68 ; Main: if cardState(hand(1)) &= DRAWN
LDW _currentRound
XORI 2
JumpEQ _endif_0x137a 60 ; Main: if currentRound &= DRAW
LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
LDI 34
STW drawRectF_x1
LDI 60
STW drawRectF_y1
LDI 63
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 34, cardBorderY, 63, cardBorderY2
LDI 21
ST fgbgColour + 1 ; Main: set FG_COLOUR, 21
LDI 35
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 62
STW drawRectF_x2
LDI 106
STW drawRectF_y2
STLW 0xFE
LDWI _page_0x28a0
CALL giga_vAC
_page_0x28a0 LDLW 0xFE
DrawRectF ; Main: rectf 35, cardY, 62, cardY2
_endif_0x137a LDI 8
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 8
LDWI _playSndCardFlip
CALL giga_vAC ; Main: gosub playSndCardFlip
LDI 63
ST fgbgColour + 1 ; Main: set FG_COLOUR, 63
LDI 35
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 62
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 35, cardY, 62, cardY2
LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 2
CALL convertEqOpAddr
STW 0xea
LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 1
CALL convertEqOpAddr
ORW 0xea
STLW 0xFE
LDWI _page_0x29a0
CALL giga_vAC
_page_0x29a0 LDLW 0xFE
JumpFalse _else_0x13ee 61 ; Main: if (cardSuit(hand(1)) = HEARTS) OR (cardSuit(hand(1)) = DIAMONDS)
LDI 3
ST fgbgColour + 1
LDWI _endif_0x13f2
CALL giga_vAC ; Main: set FG_COLOUR, 3
_else_0x13ee LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
_endif_0x13f2 LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 14
JumpEQ _elseif_0x1435 63 ; Main: if cardValue(hand(1)) &= 14
LDI 38
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7da2
NewLine
LDWI _endif_0x152b
CALL giga_vAC ; Main: at 38,cardValueY : print "A"
_elseif_0x1435 LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x71cb
STLW 0xFE
LDWI _page_0x2aa0
CALL giga_vAC
_page_0x2aa0 LDLW 0xFE
ADDW memIndex0
PEEK
XORI 13
JumpEQ _elseif_0x1478 64 ; Main: elseif cardValue(hand(1)) &= 13
LDI 38
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7ca2
NewLine
LDWI _endif_0x152b
CALL giga_vAC ; Main: at 38,cardValueY : print "K"
_elseif_0x1478 LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 12
JumpEQ _elseif_0x14bb 65 ; Main: elseif cardValue(hand(1)) &= 12
LDI 38
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
STLW 0xFE
LDWI _page_0x2ba0
CALL giga_vAC
_page_0x2ba0 LDLW 0xFE
PrintString _str_0x7ba2
NewLine
LDWI _endif_0x152b
CALL giga_vAC ; Main: at 38,cardValueY : print "Q"
_elseif_0x14bb LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 11
JumpEQ _else_0x14fe 66 ; Main: elseif cardValue(hand(1)) &= 11
LDI 38
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7aa2
NewLine
LDWI _endif_0x152b
CALL giga_vAC ; Main: at 38,cardValueY : print "J"
_else_0x14fe LDI 38
ST cursorXY
LDI 63
ST cursorXY + 1
STLW 0xFE
LDWI _page_0x2ca0
CALL giga_vAC
_page_0x2ca0 LDLW 0xFE
AtTextCursor
LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
PrintAcInt16
NewLine ; Main: at 38,cardValueY : print cardValue(hand(1))
_endif_0x152b LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
STW spriteId
LDI 42
ST spriteXY
LDI 78
ADDI 8
ST spriteXY + 1
DrawSprite ; Main: sprite noFlip, cardSuit(hand(1)), 42, cardSuitY
_endif_0x1550 LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x6fcb
ADDW memIndex0
PEEK
XORI 1
JumpEQ _endif_0x178a 77 ; Main: if cardState(hand(2)) &= DRAWN
LDW _currentRound
XORI 2
STLW 0xFE
LDWI _page_0x2da0
CALL giga_vAC
_page_0x2da0 LDLW 0xFE
JumpEQ _endif_0x15b4 69 ; Main: if currentRound &= DRAW
LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
LDI 65
STW drawRectF_x1
LDI 60
STW drawRectF_y1
LDI 94
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 65, cardBorderY, 94, cardBorderY2
LDI 21
ST fgbgColour + 1 ; Main: set FG_COLOUR, 21
LDI 66
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 93
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 66, cardY, 93, cardY2
_endif_0x15b4 LDI 8
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 8
LDWI _playSndCardFlip
CALL giga_vAC ; Main: gosub playSndCardFlip
LDI 63
ST fgbgColour + 1 ; Main: set FG_COLOUR, 63
LDI 66
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 93
STLW 0xFE
LDWI _page_0x2ea0
CALL giga_vAC
_page_0x2ea0 LDLW 0xFE
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 66, cardY, 93, cardY2
LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 2
CALL convertEqOpAddr
STW 0xea
LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 1
CALL convertEqOpAddr
ORW 0xea
JumpFalse _else_0x1628 70 ; Main: if (cardSuit(hand(2)) = HEARTS) OR (cardSuit(hand(2)) = DIAMONDS)
LDI 3
ST fgbgColour + 1
LDWI _endif_0x162c
CALL giga_vAC ; Main: set FG_COLOUR, 3
_else_0x1628 LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
_endif_0x162c LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 14
STLW 0xFE
LDWI _page_0x2fa0
CALL giga_vAC
_page_0x2fa0 LDLW 0xFE
JumpEQ _elseif_0x166f 72 ; Main: if cardValue(hand(2)) &= 14
LDI 69
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7da2
NewLine
LDWI _endif_0x1765
CALL giga_vAC ; Main: at 69,cardValueY : print "A"
_elseif_0x166f LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 13
JumpEQ _elseif_0x16b2 73 ; Main: elseif cardValue(hand(2)) &= 13
LDI 69
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7ca2
STLW 0xFE
LDWI _page_0x30a0
CALL giga_vAC
_page_0x30a0 LDLW 0xFE
NewLine
LDWI _endif_0x1765
CALL giga_vAC ; Main: at 69,cardValueY : print "K"
_elseif_0x16b2 LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 12
JumpEQ _elseif_0x16f5 74 ; Main: elseif cardValue(hand(2)) &= 12
LDI 69
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7ba2
NewLine
LDWI _endif_0x1765
CALL giga_vAC ; Main: at 69,cardValueY : print "Q"
_elseif_0x16f5 LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 11
STLW 0xFE
LDWI _page_0x31a0
CALL giga_vAC
_page_0x31a0 LDLW 0xFE
JumpEQ _else_0x1738 75 ; Main: elseif cardValue(hand(2)) &= 11
LDI 69
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7aa2
NewLine
LDWI _endif_0x1765
CALL giga_vAC ; Main: at 69,cardValueY : print "J"
_else_0x1738 LDI 69
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
PrintAcInt16
NewLine ; Main: at 69,cardValueY : print cardValue(hand(2))
_endif_0x1765 LDWI 0x71c7
PEEK
STW memIndex0
STLW 0xFE
LDWI _page_0x32a0
CALL giga_vAC
_page_0x32a0 LDLW 0xFE
LDWI 0x70cb
ADDW memIndex0
PEEK
STW spriteId
LDI 73
ST spriteXY
LDI 78
ADDI 8
ST spriteXY + 1
DrawSprite ; Main: sprite noFlip, cardSuit(hand(2)), 73, cardSuitY
_endif_0x178a LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x6fcb
ADDW memIndex0
PEEK
XORI 1
JumpEQ _endif_0x19c4 86 ; Main: if cardState(hand(3)) &= DRAWN
LDW _currentRound
XORI 2
JumpEQ _endif_0x17ee 78 ; Main: if currentRound &= DRAW
LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
LDI 96
STW drawRectF_x1
LDI 60
STW drawRectF_y1
LDI 125
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 96, cardBorderY, 125, cardBorderY2
LDI 21
ST fgbgColour + 1 ; Main: set FG_COLOUR, 21
STLW 0xFE
LDWI _page_0x33a0
CALL giga_vAC
_page_0x33a0 LDLW 0xFE
LDI 97
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 124
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 97, cardY, 124, cardY2
_endif_0x17ee LDI 8
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 8
LDWI _playSndCardFlip
CALL giga_vAC ; Main: gosub playSndCardFlip
LDI 63
ST fgbgColour + 1 ; Main: set FG_COLOUR, 63
LDI 97
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 124
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 97, cardY, 124, cardY2
LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 2
CALL convertEqOpAddr
STW 0xea
LDWI 0x71c8
PEEK
STW memIndex0
STLW 0xFE
LDWI _page_0x34a0
CALL giga_vAC
_page_0x34a0 LDLW 0xFE
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 1
CALL convertEqOpAddr
ORW 0xea
JumpFalse _else_0x1862 79 ; Main: if (cardSuit(hand(3)) = HEARTS) OR (cardSuit(hand(3)) = DIAMONDS)
LDI 3
ST fgbgColour + 1
LDWI _endif_0x1866
CALL giga_vAC ; Main: set FG_COLOUR, 3
_else_0x1862 LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
_endif_0x1866 LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 14
JumpEQ _elseif_0x18a9 81 ; Main: if cardValue(hand(3)) &= 14
LDI 100
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7da2
NewLine
LDWI _endif_0x199f
STLW 0xFE
LDWI _page_0x35a0
CALL giga_vAC
_page_0x35a0 LDLW 0xFE
CALL giga_vAC ; Main: at 100,cardValueY : print "A"
_elseif_0x18a9 LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 13
JumpEQ _elseif_0x18ec 82 ; Main: elseif cardValue(hand(3)) &= 13
LDI 100
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7ca2
NewLine
LDWI _endif_0x199f
CALL giga_vAC ; Main: at 100,cardValueY : print "K"
_elseif_0x18ec LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 12
JumpEQ _elseif_0x192f 83 ; Main: elseif cardValue(hand(3)) &= 12
LDI 100
ST cursorXY
LDI 63
STLW 0xFE
LDWI _page_0x36a0
CALL giga_vAC
_page_0x36a0 LDLW 0xFE
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7ba2
NewLine
LDWI _endif_0x199f
CALL giga_vAC ; Main: at 100,cardValueY : print "Q"
_elseif_0x192f LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 11
JumpEQ _else_0x1972 84 ; Main: elseif cardValue(hand(3)) &= 11
LDI 100
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7aa2
NewLine
LDWI _endif_0x199f
CALL giga_vAC ; Main: at 100,cardValueY : print "J"
_else_0x1972 LDI 100
ST cursorXY
STLW 0xFE
LDWI _page_0x37a0
CALL giga_vAC
_page_0x37a0 LDLW 0xFE
LDI 63
ST cursorXY + 1
AtTextCursor
LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
PrintAcInt16
NewLine ; Main: at 100,cardValueY : print cardValue(hand(3))
_endif_0x199f LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
STW spriteId
LDI 104
ST spriteXY
LDI 78
ADDI 8
ST spriteXY + 1
DrawSprite ; Main: sprite noFlip, cardSuit(hand(3)), 104, cardSuitY
_endif_0x19c4 LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x6fcb
ADDW memIndex0
PEEK
XORI 1
JumpEQ _endif_0x1bfe 95 ; Main: if cardState(hand(4)) &= DRAWN
LDW _currentRound
STLW 0xFE
LDWI _page_0x38a0
CALL giga_vAC
_page_0x38a0 LDLW 0xFE
XORI 2
JumpEQ _endif_0x1a28 87 ; Main: if currentRound &= DRAW
LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
LDI 127
STW drawRectF_x1
LDI 60
STW drawRectF_y1
LDI 156
STW drawRectF_x2
LDI 107
STW drawRectF_y2
DrawRectF ; Main: rectf 127, cardBorderY, 156, cardBorderY2
LDI 21
ST fgbgColour + 1 ; Main: set FG_COLOUR, 21
LDI 128
STW drawRectF_x1
LDI 61
STW drawRectF_y1
LDI 155
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 128, cardY, 155, cardY2
_endif_0x1a28 LDI 8
STW waitVBlankNum
WaitVBlanks ; Main: WAIT 8
LDWI _playSndCardFlip
CALL giga_vAC ; Main: gosub playSndCardFlip
LDI 63
ST fgbgColour + 1 ; Main: set FG_COLOUR, 63
LDI 128
STW drawRectF_x1
LDI 61
STW drawRectF_y1
STLW 0xFE
LDWI _page_0x39a0
CALL giga_vAC
_page_0x39a0 LDLW 0xFE
LDI 155
STW drawRectF_x2
LDI 106
STW drawRectF_y2
DrawRectF ; Main: rectf 128, cardY, 155, cardY2
LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 2
CALL convertEqOpAddr
STW 0xea
LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORI 1
CALL convertEqOpAddr
ORW 0xea
JumpFalse _else_0x1a9c 88 ; Main: if (cardSuit(hand(4)) = HEARTS) OR (cardSuit(hand(4)) = DIAMONDS)
LDI 3
ST fgbgColour + 1
LDWI _endif_0x1aa0
CALL giga_vAC ; Main: set FG_COLOUR, 3
_else_0x1a9c LDI 0
ST fgbgColour + 1 ; Main: set FG_COLOUR, 0
_endif_0x1aa0 LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 14
STLW 0xFE
LDWI _page_0x3aa0
CALL giga_vAC
_page_0x3aa0 LDLW 0xFE
JumpEQ _elseif_0x1ae3 90 ; Main: if cardValue(hand(4)) &= 14
LDI 131
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7da2
NewLine
LDWI _endif_0x1bd9
CALL giga_vAC ; Main: at 131,cardValueY : print "A"
_elseif_0x1ae3 LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 13
JumpEQ _elseif_0x1b26 91 ; Main: elseif cardValue(hand(4)) &= 13
LDI 131
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7ca2
STLW 0xFE
LDWI _page_0x3ba0
CALL giga_vAC
_page_0x3ba0 LDLW 0xFE
NewLine
LDWI _endif_0x1bd9
CALL giga_vAC ; Main: at 131,cardValueY : print "K"
_elseif_0x1b26 LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 12
JumpEQ _elseif_0x1b69 92 ; Main: elseif cardValue(hand(4)) &= 12
LDI 131
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7ba2
NewLine
LDWI _endif_0x1bd9
CALL giga_vAC ; Main: at 131,cardValueY : print "Q"
_elseif_0x1b69 LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
XORI 11
STLW 0xFE
LDWI _page_0x3ca0
CALL giga_vAC
_page_0x3ca0 LDLW 0xFE
JumpEQ _else_0x1bac 93 ; Main: elseif cardValue(hand(4)) &= 11
LDI 131
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
PrintString _str_0x7aa2
NewLine
LDWI _endif_0x1bd9
CALL giga_vAC ; Main: at 131,cardValueY : print "J"
_else_0x1bac LDI 131
ST cursorXY
LDI 63
ST cursorXY + 1
AtTextCursor
LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
PrintAcInt16
NewLine ; Main: at 131,cardValueY : print cardValue(hand(4))
_endif_0x1bd9 LDWI 0x71c9
PEEK
STW memIndex0
STLW 0xFE
LDWI _page_0x3da0
CALL giga_vAC
_page_0x3da0 LDLW 0xFE
LDWI 0x70cb
ADDW memIndex0
PEEK
STW spriteId
LDI 135
ST spriteXY
LDI 78
ADDI 8
ST spriteXY + 1
DrawSprite ; Main: sprite noFlip, cardSuit(hand(4)), 135, cardSuitY
_endif_0x1bfe Return ; Main: return
_sortCards PUSH
LDI 0
STW _i ; Main: for i = 0 to 3
_next_0x1c05 LDI 1
ADDW _i
STW 0xe8
LDI 1
ADDW _i
STW _j ; Main: for j = (1 + i) to 4
_next_0x1c15 LDWI 0x71c5
ADDW _i
PEEK
STW _tempValue1 ; Main: tempValue1 = hand(i)
LDWI 0x71c5
ADDW _j
PEEK
STW _tempValue2 ; Main: tempValue2 = hand(j)
LDWI 0x71cb
ADDW _tempValue1
PEEK
STW 0xe8
LDWI 0x71cb
ADDW _tempValue2
PEEK
STW 0xea
LDW 0xe8
SUBW 0xea
JumpGT _endif_0x1c97 96 ; Main: if cardValue(tempValue1) &> cardValue(tempValue2)
STLW 0xFE
LDWI _page_0x3ea0
CALL giga_vAC
_page_0x3ea0 LDLW 0xFE
LDWI 0x71c5
ADDW _i
PEEK
STW _tempCard ; Main: tempCard = hand(i)
LDWI 0x71c5
ADDW _j
PEEK
STW memValue
LDWI 0x71c5
ADDW _i
STW memAddr
LDW memValue
POKE memAddr ; Main: hand(i) = hand(j)
LDWI 0x71c5
ADDW _j
STW memAddr
LDW _tempCard
POKE memAddr ; Main: hand(j) = tempCard
_endif_0x1c97 ForNextFarInc _j _next_0x1c15 4 ; Main: next j
ForNextFarInc _i _next_0x1c05 3 ; Main: next i
Return ; Main: return
_checkHand PUSH
LDI 0
STW _straightFlag ; Main: straightFlag = 0
LDI 0
STW _flushFlag ; Main: flushFlag = 0
LDI 0
STW _winType ; Main: winType = NONE
LDI 31
ST fgbgColour + 1 ; Main: set FG_COLOUR, 31
STLW 0xFE
LDWI _page_0x3fa0
CALL giga_vAC
_page_0x3fa0 LDLW 0xFE
LDI 32
ST fgbgColour ; Main: set BG_COLOUR, 32
LDWI _sortCards
CALL giga_vAC ; Main: gosub sortCards
LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
STW _card0 ; Main: card0 = cardValue(hand(0))
LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
STW _card1 ; Main: card1 = cardValue(hand(1))
LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
STW _card2 ; Main: card2 = cardValue(hand(2))
LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
STW _card3 ; Main: card3 = cardValue(hand(3))
LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x71cb
ADDW memIndex0
PEEK
STW _card4 ; Main: card4 = cardValue(hand(4))
LDWI _flush
CALL giga_vAC ; Main: gosub flush
STLW 0xFE
LDWI _page_0x40a0
CALL giga_vAC
_page_0x40a0 LDLW 0xFE
LDWI _straight
CALL giga_vAC ; Main: gosub straight
LDWI _royalFlush
CALL giga_vAC ; Main: gosub royalFlush
LDW _winType
XORI 10
JumpEQ _endif_0x1d65 97 ; Main: if winType &= ROYALFLUSH
LDI 250
STW mathX
LDW _betAmount
STW mathY
LDWI multiply16bit
CALL giga_vAC
STW _winAmount ; Main: winAmount = 250 * betAmount
Return ; Main: return
_endif_0x1d65 LDWI _straightFlush
CALL giga_vAC ; Main: gosub straightFlush
LDW _winType
XORI 9
JumpEQ _endif_0x1d8d 98 ; Main: if winType &= STRAIGHTFLUSH
LDI 50
STW mathX
LDW _betAmount
STW mathY
LDWI multiply16bit
CALL giga_vAC
STW _winAmount ; Main: winAmount = 50 * betAmount
Return ; Main: return
_endif_0x1d8d LDWI _fourOfAKind
CALL giga_vAC ; Main: gosub fourOfAKind
LDW _winType
XORI 7
STLW 0xFE
LDWI _page_0x41a0
CALL giga_vAC
_page_0x41a0 LDLW 0xFE
JumpEQ _endif_0x1db5 99 ; Main: if winType &= FOUROFAKIND
LDI 25
STW mathX
LDW _betAmount
STW mathY
LDWI multiply16bit
CALL giga_vAC
STW _winAmount ; Main: winAmount = 25 * betAmount
Return ; Main: return
_endif_0x1db5 LDWI _fullHouse
CALL giga_vAC ; Main: gosub fullHouse
LDW _winType
XORI 6
JumpEQ _endif_0x1ddd 100 ; Main: if winType &= FULLHOUSE
LDI 9
STW mathX
LDW _betAmount
STW mathY
LDWI multiply16bit
CALL giga_vAC
STW _winAmount ; Main: winAmount = 9 * betAmount
Return ; Main: return
_endif_0x1ddd LDW _flushFlag
XORI 1
JumpEQ _endif_0x1e04 101 ; Main: if flushFlag &= 1
LDI 5
STW _winType ; Main: winType = FLUSH
LDI 6
STW mathX
LDW _betAmount
STW mathY
LDWI multiply16bit
STLW 0xFE
LDWI _page_0x42a0
CALL giga_vAC
_page_0x42a0 LDLW 0xFE
CALL giga_vAC
STW _winAmount ; Main: winAmount = 6 * betAmount
Return ; Main: return
_endif_0x1e04 LDW _straightFlag
XORI 1
JumpEQ _endif_0x1e2b 102 ; Main: if straightFlag &= 1
LDI 4
STW _winType ; Main: winType = STRAIGHT
LDI 4
STW mathX
LDW _betAmount
STW mathY
LDWI multiply16bit
CALL giga_vAC
STW _winAmount ; Main: winAmount = 4 * betAmount
Return ; Main: return
_endif_0x1e2b LDWI _threeOfAKind
CALL giga_vAC ; Main: gosub threeOfAKind
LDW _winType
XORI 3
JumpEQ _endif_0x1e53 103 ; Main: if winType &= THREEOFAKIND
LDI 3
STW mathX
LDW _betAmount
STW mathY
LDWI multiply16bit
CALL giga_vAC
STW _winAmount ; Main: winAmount = 3 * betAmount
Return ; Main: return
_endif_0x1e53 LDWI _twoPair
CALL giga_vAC ; Main: gosub twoPair
LDW _winType
XORI 2
STLW 0xFE
LDWI _page_0x43a0
CALL giga_vAC
_page_0x43a0 LDLW 0xFE
JumpEQ _endif_0x1e7b 104 ; Main: if winType &= TWOPAIR
LDI 2
STW mathX
LDW _betAmount
STW mathY
LDWI multiply16bit
CALL giga_vAC
STW _winAmount ; Main: winAmount = 2 * betAmount
Return ; Main: return
_endif_0x1e7b LDWI _jacksOrBetter
CALL giga_vAC ; Main: gosub jacksOrBetter
LDW _winType
XORI 1
JumpEQ _endif_0x1e96 105 ; Main: if winType &= JACKSORBETTER
LDW _betAmount
STW _winAmount ; Main: winAmount = betAmount
Return ; Main: return
_endif_0x1e96 Return ; Main: return
_jacksOrBetter PUSH
LDI 0
STW _i ; Main: for i = 0 to 4
_next_0x1e9d LDWI 0x71c5
ADDW _i
PEEK
STW _tempValue1 ; Main: tempValue1 = hand(i)
LDW _i
ADDI 1
STW memIndex0
LDWI 0x71c5
ADDW memIndex0
PEEK
STW _tempValue2 ; Main: tempValue2 = hand(i+1)
LDWI 0x71cb
ADDW _tempValue1
PEEK
STW 0xe8
STLW 0xFE
LDWI _page_0x44a0
CALL giga_vAC
_page_0x44a0 LDLW 0xFE
LDWI 0x71cb
ADDW _tempValue2
PEEK
XORW 0xe8
CALL convertEqOpAddr
STW 0xea
LDWI 0x71cb
ADDW _tempValue2
PEEK
SUBI 10
CALL convertGtOpAddr
ANDW 0xea
JumpFalse _endif_0x1f07 106 ; Main: if (cardValue(tempValue1) = cardValue(tempValue2)) AND (cardValue(tempValue2) > 10)
LDI 1
STW _winType ; Main: winType = JACKSORBETTER
_endif_0x1f07 ForNextFarInc _i _next_0x1e9d 4 ; Main: next i
Return ; Main: return
_twoPair PUSH
LDW _card0
XORW _card1
CALL convertEqOpAddr
STW 0xe8
LDW _card2
XORW _card3
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _elseif_0x1f41 107 ; Main: if (card0 = card1) AND (card2 = card3)
LDI 2
STW _winType
LDWI _endif_0x1f8e
CALL giga_vAC ; Main: winType = TWOPAIR
STLW 0xFE
LDWI _page_0x45a0
CALL giga_vAC
_page_0x45a0 LDLW 0xFE
_elseif_0x1f41 LDW _card1
XORW _card2
CALL convertEqOpAddr
STW 0xe8
LDW _card3
XORW _card4
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _elseif_0x1f6a 108 ; Main: elseif (card1 = card2) AND (card3 = card4)
LDI 2
STW _winType
LDWI _endif_0x1f8e
CALL giga_vAC ; Main: winType = TWOPAIR
_elseif_0x1f6a LDW _card0
XORW _card1
CALL convertEqOpAddr
STW 0xe8
LDW _card3
XORW _card4
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _endif_0x1f8e 109 ; Main: elseif (card0 = card1) AND (card3 = card4)
LDI 2
STW _winType ; Main: winType = TWOPAIR
_endif_0x1f8e Return ; Main: return
_threeOfAKind PUSH
LDI 0
STW _i ; Main: for i = 0 to 2
_next_0x1f95 LDWI 0x71c5
ADDW _i
PEEK
STW _tempValue1 ; Main: tempValue1 = hand(i)
LDW _i
ADDI 1
STW memIndex0
LDWI 0x71c5
STLW 0xFE
LDWI _page_0x46a0
CALL giga_vAC
_page_0x46a0 LDLW 0xFE
ADDW memIndex0
PEEK
STW _tempValue2 ; Main: tempValue2 = hand(i+1)
LDW _i
ADDI 2
STW memIndex0
LDWI 0x71c5
ADDW memIndex0
PEEK
STW _tempValue3 ; Main: tempValue3 = hand(i+2)
LDWI 0x71cb
ADDW _tempValue1
PEEK
STW 0xe8
LDWI 0x71cb
ADDW _tempValue2
PEEK
XORW 0xe8
CALL convertEqOpAddr
STW 0xea
LDWI 0x71cb
ADDW _tempValue2
PEEK
STW 0xec
LDWI 0x71cb
ADDW _tempValue3
PEEK
XORW 0xec
CALL convertEqOpAddr
ANDW 0xea
JumpFalse _endif_0x201f 110 ; Main: if (cardValue(tempValue1) = cardValue(tempValue2)) AND (cardValue(tempValue2) = cardValue(tempValue3))
LDI 3
STW _winType ; Main: winType = THREEOFAKIND
_endif_0x201f ForNextFarInc _i _next_0x1f95 2 ; Main: next i
STLW 0xFE
LDWI _page_0x47a0
CALL giga_vAC
_page_0x47a0 LDLW 0xFE
Return ; Main: return
_straight PUSH
LDW _card3
ADDI 1
XORW _card4
CALL convertEqOpAddr
STW 0xea
LDW _card3
ADDI 1
STW 0xec
LDW _card2
ADDI 2
XORW 0xec
CALL convertEqOpAddr
ANDW 0xea
STW 0xee
LDW _card2
ADDI 2
STW 0xe8
LDW _card1
ADDI 3
XORW 0xe8
CALL convertEqOpAddr
ANDW 0xee
STW 0xea
LDW _card1
ADDI 3
STW 0xec
LDW _card0
ADDI 4
XORW 0xec
CALL convertEqOpAddr
ANDW 0xea
JumpFalse _elseif_0x209f 111 ; Main: if (card4 = card3+1) AND (card3+1 = card2+2) AND (card2+2 = card1+3) AND (card1+3 = card0+4)
LDI 1
STW _straightFlag
LDWI _endif_0x20ed
CALL giga_vAC ; Main: straightFlag = 1
_elseif_0x209f LDW _card4
XORI 14
STLW 0xFE
LDWI _page_0x48a0
CALL giga_vAC
_page_0x48a0 LDLW 0xFE
CALL convertEqOpAddr
STW 0xe8
LDW _card0
XORI 2
CALL convertEqOpAddr
ANDW 0xe8
STW 0xea
LDW _card1
XORI 3
CALL convertEqOpAddr
ANDW 0xea
STW 0xec
LDW _card2
XORI 4
CALL convertEqOpAddr
ANDW 0xec
STW 0xee
LDW _card3
XORI 5
CALL convertEqOpAddr
ANDW 0xee
JumpFalse _endif_0x20ed 112 ; Main: elseif (card4 = ACE) AND (card0 = 2) AND (card1 = 3) AND (card2 = 4) AND (card3 = 5)
LDI 1
STW _straightFlag ; Main: straightFlag = 1
_endif_0x20ed Return ; Main: return
_flush PUSH
LDWI 0x71c5
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
STW 0xea
LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORW 0xea
STLW 0xFE
LDWI _page_0x49a0
CALL giga_vAC
_page_0x49a0 LDLW 0xFE
CALL convertEqOpAddr
STW 0xee
LDWI 0x71c6
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
STW 0xea
LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORW 0xea
CALL convertEqOpAddr
ANDW 0xee
STW 0xee
LDWI 0x71c7
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
STW 0xea
LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORW 0xea
CALL convertEqOpAddr
ANDW 0xee
STW 0xee
LDWI 0x71c8
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
STW 0xea
STLW 0xFE
LDWI _page_0x4aa0
CALL giga_vAC
_page_0x4aa0 LDLW 0xFE
LDWI 0x71c9
PEEK
STW memIndex0
LDWI 0x70cb
ADDW memIndex0
PEEK
XORW 0xea
CALL convertEqOpAddr
ANDW 0xee
JumpFalse _endif_0x21c0 113 ; Main: if (cardSuit(hand(0)) = cardSuit(hand(1))) AND (cardSuit(hand(1)) = cardSuit(hand(2))) AND (cardSuit(hand(2)) = cardSuit(hand(3))) AND (cardSuit(hand(3)) = cardSuit(hand(4)))
LDI 1
STW _flushFlag ; Main: flushFlag = 1
_endif_0x21c0 Return ; Main: return
_fullHouse PUSH
LDW _card0
XORW _card1
CALL convertEqOpAddr
STW 0xe8
LDW _card1
XORW _card2
CALL convertEqOpAddr
ANDW 0xe8
STW 0xea
LDW _card3
XORW _card4
CALL convertEqOpAddr
ANDW 0xea
JumpFalse _elseif_0x21fa 114 ; Main: if (card0 = card1) AND (card1 = card2) AND (card3 = card4)
LDI 6
STW _winType
LDWI _endif_0x222c
CALL giga_vAC ; Main: winType = FULLHOUSE
_elseif_0x21fa LDW _card0
XORW _card1
CALL convertEqOpAddr
STW 0xe8
LDW _card2
STLW 0xFE
LDWI _page_0x4ba0
CALL giga_vAC
_page_0x4ba0 LDLW 0xFE
XORW _card3
CALL convertEqOpAddr
ANDW 0xe8
STW 0xea
LDW _card3
XORW _card4
CALL convertEqOpAddr
ANDW 0xea
JumpFalse _endif_0x222c 115 ; Main: elseif (card0 = card1) AND (card2 = card3) AND (card3 = card4)
LDI 6
STW _winType ; Main: winType = FULLHOUSE
_endif_0x222c Return ; Main: return
_fourOfAKind PUSH
LDW _card0
XORW _card1
CALL convertEqOpAddr
STW 0xe8
LDW _card1
XORW _card2
CALL convertEqOpAddr
ANDW 0xe8
STW 0xea
LDW _card2
XORW _card3
CALL convertEqOpAddr
ANDW 0xea
JumpFalse _elseif_0x2266 116 ; Main: if (card0 = card1) AND (card1 = card2) AND (card2 = card3)
LDI 7
STW _winType
LDWI _endif_0x2298
CALL giga_vAC ; Main: winType = FOUROFAKIND
_elseif_0x2266 LDW _card1
XORW _card2
CALL convertEqOpAddr
STW 0xe8
LDW _card2
XORW _card3
STLW 0xFE
LDWI _page_0x4ca0
CALL giga_vAC
_page_0x4ca0 LDLW 0xFE
CALL convertEqOpAddr
ANDW 0xe8
STW 0xea
LDW _card3
XORW _card4
CALL convertEqOpAddr
ANDW 0xea
JumpFalse _endif_0x2298 117 ; Main: elseif (card1 = card2) AND (card2 = card3) AND (card3 = card4)
LDI 7
STW _winType ; Main: winType = FOUROFAKIND
_endif_0x2298 Return ; Main: return
_straightFlush PUSH
LDW _straightFlag
XORI 1
CALL convertEqOpAddr
STW 0xe8
LDW _flushFlag
XORI 1
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _endif_0x22bf 118 ; Main: if (straightFlag = 1) AND (flushFlag = 1)
LDI 9
STW _winType ; Main: winType = STRAIGHTFLUSH
_endif_0x22bf Return ; Main: return
_royalFlush PUSH
LDW _flushFlag
XORI 1
CALL convertEqOpAddr
STW 0xe8
LDW _card0
XORI 10
CALL convertEqOpAddr
ANDW 0xe8
STW 0xea
LDW _card1
XORI 11
CALL convertEqOpAddr
ANDW 0xea
STLW 0xFE
LDWI _page_0x4da0
CALL giga_vAC
_page_0x4da0 LDLW 0xFE
STW 0xec
LDW _card2
XORI 12
CALL convertEqOpAddr
ANDW 0xec
STW 0xee
LDW _card3
XORI 13
CALL convertEqOpAddr
ANDW 0xee
STW 0xe8
LDW _card4
XORI 14
CALL convertEqOpAddr
ANDW 0xe8
JumpFalse _endif_0x231e 119 ; Main: if (flushFlag = 1) AND (card0 = 10) AND (card1 = JACK) AND (card2 = QUEEN) AND (card3 = KING) AND (card4 = ACE)
LDI 10
STW _winType ; Main: winType = ROYALFLUSH
_endif_0x231e Return ; Main: return
HALT ; Main: END
;****************************************************************************************************************************************
;****************************************************************************************************************************************
;* Internal runtime, DO NOT MODIFY PAST THIS POINT, modifications must be made in the original include files *
;****************************************************************************************************************************************
;****************************************************************************************************************************************
romCheck EQU 0x63a1
convertEqOp EQU 0x61bc
convertGtOp EQU 0x61b3
multiply16bit EQU 0x65cb
divide16bit EQU 0x69a8
randMod16bit EQU 0x62ac
scanlineMode EQU 0x61c5
waitVBlank EQU 0x62a0
waitVBlanks EQU 0x61ec
resetVideoFlags EQU 0x61cf
initClearFuncs EQU 0x61db
clearVertBlinds EQU 0x66c9
clearCursorRow EQU 0x64cf
drawHLine EQU 0x64a2
drawVLine EQU 0x6ba1
drawRect EQU 0x67c0
drawRectF EQU 0x66a1
drawSprite_ EQU 0x65a3
drawSprite EQU 0x68a1
soundAllOff EQU 0x62e9
soundOn EQU 0x62bf
printInit EQU 0x62d3
printText EQU 0x67a7
printDigit EQU 0x63b8
printInt16 EQU 0x68ae
printChar EQU 0x6ca0
atTextCursor EQU 0x63da
newLineScroll EQU 0x6aa2
convertEqOpAddr EQU 0x00c0
convertNeOpAddr EQU 0x00c2
convertLeOpAddr EQU 0x00c4
convertGeOpAddr EQU 0x00c6
convertLtOpAddr EQU 0x00c8
convertGtOpAddr EQU 0x00ca
convert8Arr2dAddr EQU 0x00cc
convert8Arr3dAddr EQU 0x00ce
convert16Arr2dAddr EQU 0x00d0
convert16Arr3dAddr EQU 0x00d2
realTimeStubAddr EQU 0x00d4
; do *NOT* use register4 to register7 during time slicing
realTimeAddr EQU register0
realTimeProc0 EQU register1
realTimeProc1 EQU register2
realTimeProc2 EQU register3
numericLabel EQU register0
defaultLabel EQU register1
lutLabs EQU register2
lutAddrs EQU register3
lutIndex EQU register8
romType EQU register0
romErrAddr EQU register1
romErrPixel EQU register2
romCheck LD giga_romType
ANDI 0xFC
SUBW romType
BGE romC_return
LDWI giga_vram
STW romErrAddr
romC_loop LD romErrPixel
POKE romErrAddr
INC romErrPixel
BRA romC_loop ; flash left hand corner pixel indicating rom error
romC_return RET
; convert equal to into a boolean
convertEqOp BEQ convertEq_1
LDI 0
RET
convertEq_1 LDI 1
RET
; convert greater than into boolean
convertGtOp BGT convertGt_1
LDI 0
RET
convertGt_1 LDI 1
RET
; do *NOT* use register4 to register7 during time slicing
mathX EQU register8
mathY EQU register9
mathSum EQU register12
mathRem EQU register12
mathMask EQU register13
mathSign EQU register14
mathQuot EQU register15
mathShift EQU register15
mathBase EQU register10
mathPow EQU register11
mathResult EQU register14
; accumulator = mathX * mathY, (result 16bit)
multiply16bit LDI 0
STW mathSum
LDW mathX
BEQ multiply16_exit ; if x=0 then return 0
LDWI SYS_LSRW1_48
STW giga_sysFn
LDW mathY
multiply16_loop BEQ multiply16_exit ; if y=0 then return
ANDI 1
BEQ multiply16_skip
LDW mathSum
ADDW mathX
STW mathSum ; mathSum += mathX
multiply16_skip LDW mathX
LSLW
STW mathX ; mathX = mathX <<1
LDW mathY
SYS 48
STW mathY ; mathY = mathY >>1
BRA multiply16_loop
%if TIME_SLICING
multiply16_exit PUSH
CALL realTimeStubAddr
POP
LDW mathSum
%else
multiply16_exit LDW mathSum
%endif
RET
; accumulator:mathRem = mathX / mathY, (results 16bit)
divide16bit LDW mathX
XORW mathY
STW mathSign
LDW mathX
BGE divide16_pos0
LDI 0
SUBW mathX
STW mathX
divide16_pos0 LDW mathY
BGE divide16_pos1
LDI 0
SUBW mathY
STW mathY
divide16_pos1 LDI 0
STW mathRem
LDI 1
divide16_loop STW mathMask
LDW mathRem
LSLW
STW mathRem
LDW mathX
BGE divide16_incr
INC mathRem
divide16_incr LDW mathX
LSLW
STW mathX
LDW mathRem
SUBW mathY
BLT divide16_incx
STW mathRem
INC mathX
divide16_incx LDW mathMask
LSLW
BNE divide16_loop
%if TIME_SLICING
PUSH
CALL realTimeStubAddr
POP
%endif
LDW mathSign
BGE divide16_exit
LDI 0
SUBW mathX
RET
divide16_exit LDW mathX
RET
randMod16bit PUSH
LDWI SYS_Random_34
STW giga_sysFn
SYS 34
STW mathX
LDWI divide16bit
CALL giga_vAC
LDW mathRem
POP
RET
; do *NOT* use register4 to register7 during time slicing
graphicsMode EQU register0
waitVBlankNum EQU register0
drawHLine_x1 EQU register0
drawHLine_y1 EQU register1
drawHLine_x2 EQU register2
drawHLine_x4 EQU register3
drawVLine_x1 EQU register0
drawVLine_y1 EQU register1
drawVLine_y2 EQU register2
drawVLine_y8 EQU register3
drawLine_x1 EQU register0
drawLine_y1 EQU register1
drawLine_x2 EQU register2
drawLine_y2 EQU register3
drawLine_xy1 EQU register0
drawLine_xy2 EQU register1
drawLine_dxy1 EQU register2
drawLine_dxy2 EQU register3
drawLine_dx1 EQU register4 ; register4 to register7 used for temp values, state will be invalidated during time slicing
drawLine_dy1 EQU register5
drawLine_dx2 EQU register6
drawLine_dy2 EQU register7
drawLine_sx EQU register8
drawLine_sy EQU register9
drawLine_h EQU register10
drawLine_num EQU register11
drawLine_count EQU register12
drawLine_tmp EQU register13
drawLine_dx EQU register2
drawLine_dy EQU register3
drawLine_u EQU register8
drawLine_v EQU register9
drawLine_addr EQU register10
drawPixel_xy EQU register15
readPixel_xy EQU register15
drawCircle_cx EQU register0
drawCircle_cy EQU register1
drawCircle_r EQU register2
drawCircle_a EQU register3
drawCircle_d EQU register8
drawCircle_x EQU register9
drawCircle_y EQU register10
drawCircle_ch0 EQU register11
drawCircle_ch1 EQU register12
drawCircle_ch2 EQU register13
drawCircle_ch3 EQU register14
drawCircleF_x1 EQU register0
drawCircleF_y1 EQU register1
drawCircleF_x2 EQU register2
drawCircleF_cx EQU register15
drawCircleF_cy EQU register10
drawCircleF_r EQU register11
drawCircleF_v EQU register8
drawCircleF_w EQU register9
drawRect_x1 EQU register7
drawRect_y1 EQU register10
drawRect_x2 EQU register11
drawRect_y2 EQU register15
drawRectF_x1 EQU register0
drawRectF_y1 EQU register1
drawRectF_x2 EQU register2
drawRectF_y2 EQU register7
drawPoly_mode EQU register14
drawPoly_addr EQU register15
scanlineMode LDWI SYS_SetMode_v2_80
STW giga_sysFn
LDW graphicsMode
SYS 80
RET
waitVBlank LD giga_videoY
XORI 179
BNE waitVBlank
%if TIME_SLICING
PUSH
CALL realTimeStubAddr
POP
%endif
RET
waitVBlanks PUSH
waitVB_loop LDW waitVBlankNum
SUBI 0x01
STW waitVBlankNum
BGE waitVB_vblank
POP
RET
waitVB_vblank LDWI waitVBlank
CALL giga_vAC
BRA waitVB_loop
; do *NOT* use register4 to register7 during time slicing
xreset EQU register0
xcount EQU register1
ycount EQU register2
treset EQU register3
breset EQU register8
top EQU register9
bot EQU register10
vramAddr EQU register11
evenAddr EQU register12
clsAddress EQU register13
clsLines EQU register14
varAddress EQU register13
clrAddress EQU register13
clrLines EQU register14
clrWidth EQU register15
resetVideoFlags LDI giga_CursorX ; cursor x start
STW cursorXY
LDWI ON_BOTTOM_ROW_MSK
ANDW miscFlags
STW miscFlags ; reset on bottom row flag
RET
initClearFuncs PUSH
LDWI resetVideoFlags
CALL giga_vAC
LDWI SYS_SetMemory_v2_54 ; setup fill memory SYS routine
STW giga_sysFn
LD fgbgColour
ST giga_sysArg1 ; fill value
POP
RET
; clears the viewable screen using a vertical blinds effect
clearVertBlinds PUSH
LDWI initClearFuncs
CALL giga_vAC
LDI giga_vram >> 8
STW top
clearVB_loopy LDI giga_xres
ST giga_sysArg0
LDI 0
ST giga_sysArg2 ; low start address
LD top
ST giga_sysArg3 ; top line
SYS 54 ; fill memory
LDI giga_xres
ST giga_sysArg0
LDI 0
ST giga_sysArg2 ; low start address
LDWI giga_yres - 1 + 16
SUBW top
ST giga_sysArg3 ; bottom line
SYS 54 ; fill memory
INC top ; next top line
%if TIME_SLICING
CALL realTimeStubAddr
%endif
LD top
SUBI giga_yres / 2 + 8
BLT clearVB_loopy
POP
RET
drawHLine PUSH
LD drawHLine_x1
ST giga_sysArg2 ; low start address
LD drawHLine_x2
SUBW drawHLine_x1
BGE drawHL_cont
LD drawHLine_x2
ST giga_sysArg2 ; low start address
LD drawHLine_x1
SUBW drawHLine_x2
drawHL_cont ADDI 1
ST giga_sysArg0 ; count
LD fgbgColour + 1
ST giga_sysArg1 ; fill value
LD drawHLine_y1
ADDI 8
ST giga_sysArg3 ; high start address
LDWI SYS_SetMemory_v2_54
STW giga_sysFn
SYS 54 ; fill memory
%if TIME_SLICING
CALL realTimeStubAddr
%endif
POP
RET
drawVLine PUSH
LDW drawVLine_y2
SUBW drawVLine_y1
BGE drawVL_cont
LDW drawVLine_y2
STW drawLine_tmp
LDW drawVLine_y1
STW drawVLine_y2
LDW drawLine_tmp
STW drawVLine_y1 ; if y2 < y1 then swap y2 with y1
drawVL_cont LD drawVLine_x1
ST giga_sysArg4
LD drawVLine_y1
ADDI 8
ST drawVLine_y1
ST giga_sysArg5
LDW drawVLine_y2
ADDI 8
ST drawVLine_y2
SUBW drawVLine_y1
SUBI 8
BLT drawVL_loop1
LDW fgbgColour
STW giga_sysArg0
LDWI SYS_VDrawBits_134
STW giga_sysFn ; setup 8 pixel SYS routine
LDW drawVLine_y2
SUBI 7
STW drawVLine_y8 ; 8 pixel chunks limit
drawVL_loop0 LDI 0xFF
ST giga_sysArg2 ; 8 pixels of fg and bg colour
SYS 134 ; SYS_VDrawBits_134, 270 - 134/2 = 0xCB
%if TIME_SLICING
CALL realTimeStubAddr
%endif
LD giga_sysArg5
ADDI 8
ST giga_sysArg5
SUBW drawVLine_y8
BLT drawVL_loop0 ; all 8 pixel chunks
drawVL_loop1 LD fgbgColour + 1
POKE giga_sysArg4
INC giga_sysArg5
LD giga_sysArg5
SUBW drawVLine_y2
BLE drawVL_loop1 ; remaining pixels
POP
RET
drawRect PUSH
LDW drawRect_x1
STW drawHLine_x1
LDW drawRect_y1
STW drawHLine_y1
LDW drawRect_x2
STW drawHLine_x2
LDWI drawHLine
CALL giga_vAC
LDW drawRect_y2
STW drawHLine_y1
LDWI drawHLine
CALL giga_vAC
LDW drawRect_x1
STW drawVLine_x1
LDW drawRect_y1
STW drawVLine_y1
LDW drawRect_y2
STW drawVLine_y2
LDWI drawVLine
CALL giga_vAC
LDW drawRect_x2
STW drawVLine_x1
LDW drawRect_y1
STW drawVLine_y1
LDW drawRect_y2
STW drawVLine_y2
LDWI drawVLine
CALL giga_vAC
POP
RET
drawRectF PUSH
LDW drawRectF_y2
SUBW drawRectF_y1
BGE drawRF_loop
LDW drawRectF_y2
STW drawLine_tmp
LDW drawRectF_y1
STW drawRectF_y2
LDW drawLine_tmp
STW drawRectF_y1 ;if y2 < y1 then swap y2 with y1
drawRF_loop LDW drawRectF_y1
STW drawHLine_y1
LDWI drawHLine
CALL giga_vAC
INC drawRectF_y1
LDW drawRectF_y1
SUBW drawRectF_y2
BLE drawRF_loop
POP
RET
; do *NOT* use register4 to register7 during time slicing
spriteId EQU register0
spriteXY EQU register1
spriteAddrs EQU register2
drawSprite_ PUSH
LDWI _spritesLut_
ADDW spriteId
ADDW spriteId
DEEK
STW spriteAddrs ; get sprite address table
drawS_loop LDW spriteAddrs
DEEK ; get source address
BEQ drawS_exit
STW giga_sysArg0
INC spriteAddrs
INC spriteAddrs
LDW spriteAddrs
DEEK ; get stripe destination offset
ADDW spriteXY
SYS 64
INC spriteAddrs
INC spriteAddrs
%if TIME_SLICING
CALL realTimeStubAddr
%endif
BRA drawS_loop
drawS_exit POP
RET
drawSprite PUSH
LDWI SYS_Sprite6_v3_64
STW giga_sysFn
LDWI drawSprite_
CALL giga_vAC
POP
RET
audioAddr EQU register1
waveType EQU register2
midiNote EQU register4 ; register4 to register7 are the only free registers during time slicing
midiCommand EQU register5
midiPtr EQU register6
sndChannel EQU register8
sndFrequency EQU register9
sndVolume EQU register10
sndWaveType EQU register11
musicStream EQU register8
musicNote EQU register9
musicCommand EQU register10
musicPtr EQU register11
soundAllOff LDWI 0x01FC
STW sndChannel
LDI 0
DOKE sndChannel ; turn off channel 0
INC sndChannel + 1
DOKE sndChannel ; turn off channel 1
INC sndChannel + 1
DOKE sndChannel ; turn off channel 2
INC sndChannel + 1
DOKE sndChannel ; turn off channel 3
RET
soundOn LDWI SYS_LSRW1_48
STW giga_sysFn
LDI 0xFC
ST sndChannel
LD sndFrequency
SYS 48
ST sndFrequency ; right shift low byte of sndFrequency by 1
LDW sndFrequency ; format = high:8 low:07, (bit 7 of low byte = 0)
DOKE sndChannel ; turn on channel
RET
; do *NOT* use register4 to register7 during time slicing
textStr EQU register0
textNum EQU register0
textBak EQU register0
textHex EQU register1
textLen EQU register2
textOfs EQU register3
textChr EQU register8
textFont EQU register9
textSlice EQU register10
scanLine EQU register11
digitMult EQU register12
digitIndex EQU register13
clearLoop EQU register14
printInit LDWI SYS_VDrawBits_134
STW giga_sysFn
LDW fgbgColour
STW giga_sysArg0
LD cursorXY + 1 ; xy = peek(256+2*y)*256 + x
LSLW
INC giga_vAC + 1
PEEK
ST giga_sysArg4 + 1
LD cursorXY
ST giga_sysArg4 ; xy position
RET
; prints text string pointed to by textStr
printText PUSH
LDWI printInit
CALL giga_vAC
; first byte is length
printT_char INC textStr ; next char
LDW textStr
PEEK
BEQ printT_exit ; check for delimiting zero
ST textChr
LDWI printChar
CALL giga_vAC
BRA printT_char
printT_exit POP
RET
; prints single digit in textNum
printDigit PUSH
LDW textNum
printD_index SUBW digitMult
BLT printD_cont
STW textNum
INC digitIndex
BRA printD_index
printD_cont LD digitIndex
BEQ printD_exit
ORI 0x30
ST textChr
LDWI printChar
CALL giga_vAC
LDI 0x30
ST digitIndex
printD_exit POP
RET
; prints 16bit int in textNum
printInt16 PUSH
LDWI printInit
CALL giga_vAC
LDI 0
ST digitIndex
LDW textNum
BGE printI16_pos
LDI 0x2D
ST textChr
LDWI printChar
CALL giga_vAC
LDI 0
SUBW textNum
STW textNum
printI16_pos LDWI 10000
STW digitMult
LDWI printDigit
CALL giga_vAC
LDWI 1000
STW digitMult
LDWI printDigit
CALL giga_vAC
LDI 100
STW digitMult
LDWI printDigit
CALL giga_vAC
LDI 10
STW digitMult
LDWI printDigit
CALL giga_vAC
LD textNum
ORI 0x30
ST textChr
LDWI printChar
CALL giga_vAC
POP
RET
; prints char in textChr
printChar LD textChr
ANDI 0x7F ; char can't be bigger than 127
SUBI 82
BGE printC_text82
ADDI 50
BLT printC_exit ; char<32 exit
STW textChr ; char-32
LDWI giga_text32 ; text font slice base address for chars 32-81
BRA printC_font
printC_text82 STW textChr ; char-82
LDWI giga_text82 ; text font slice base address for chars 82+
printC_font STW textFont
LD textChr
LSLW
LSLW
ADDW textChr
ADDW textFont
STW textFont ; char*5 + textFont
LDI 0x05
printC_slice ST textSlice
LDW textFont ; text font slice base address
LUP 0x00 ; get ROM slice
ST giga_sysArg2
SYS 134 ; draw vertical slice, SYS_VDrawBits_134, 270 - 134/2 = 0xCB
INC textFont ; next vertical slice
INC giga_sysArg4 ; next x
LD textSlice
SUBI 1
BNE printC_slice
ST giga_sysArg2 ; result of printC_slice is 0
SYS 134 ; draw last blank slice
INC giga_sysArg4 ; using sysArg4 as a temporary cursor address for multiple char prints
PUSH
%if TIME_SLICING
CALL realTimeStubAddr
%endif
LD cursorXY
ADDI giga_xfont
ST cursorXY
SUBI giga_xres - giga_xfont ; last possible char on line
BLE printC_pop
LDWI newLineScroll ; next row, scroll at bottom
CALL giga_vAC
printC_pop POP
printC_exit RET
atTextCursor LD cursorXY
SUBI giga_xres - giga_xfont
BLE atTC_checkY
LDI 0
ST cursorXY
atTC_checkY LD cursorXY + 1
SUBI giga_yres - giga_yfont
BLT atTC_resbot
LDI giga_yres - giga_yfont
ST cursorXY + 1
LDI ON_BOTTOM_ROW_BIT
ORW miscFlags
STW miscFlags ; set on bottom row flag
RET
atTC_resbot LDWI ON_BOTTOM_ROW_MSK
ANDW miscFlags
STW miscFlags ; reset on bottom row flag
RET
; clears the top giga_yfont lines of pixels in preparation of text scrolling
clearCursorRow PUSH
LDWI SYS_SetMemory_v2_54
STW giga_sysFn ; setup fill memory SYS routine
LD fgbgColour
ST giga_sysArg1 ; fill value
LDWI giga_videoTable
PEEK
ST giga_sysArg3 ; row0 high byte address
LDI giga_yfont
clearCR_loopy ST clearLoop
LDI giga_xres
ST giga_sysArg0
LDI 0
ST giga_sysArg2 ; low start address
SYS 54 ; fill memory
INC giga_sysArg3 ; next line
LD clearLoop
SUBI 1
BNE clearCR_loopy
%if TIME_SLICING
CALL realTimeStubAddr
%endif
LDWI printInit
CALL giga_vAC ; re-initialise the SYS registers
POP
RET
; print from top row to bottom row, then start scrolling
newLineScroll LDI giga_CursorX ; cursor x start
ST cursorXY
ST giga_sysArg4
LDI ENABLE_SCROLL_BIT
ANDW miscFlags
BNE newLS_cont0 ; is scroll on or off?
RET
newLS_cont0 PUSH
LDI ON_BOTTOM_ROW_BIT
ANDW miscFlags ; is on bottom row flag?
BNE newLS_cont1
LD cursorXY + 1
ADDI giga_yfont
ST cursorXY + 1
SUBI giga_yres
BLT newLS_exit
LDI giga_yres - giga_yfont
ST cursorXY + 1
newLS_cont1 LDWI clearCursorRow
CALL giga_vAC
LDWI giga_videoTable
STW scanLine
%if TIME_SLICING
newLS_scroll CALL realTimeStubAddr
LDW scanLine
%else
newLS_scroll LDW scanLine
%endif
PEEK
ADDI giga_yfont
ANDI 0x7F
SUBI giga_yfont
BGE newLS_adjust
ADDI giga_yfont
newLS_adjust ADDI giga_yfont
POKE scanLine
INC scanLine ; scanline pointers are 16bits
INC scanLine
LD scanLine
SUBI 0xF0 ; scanline pointers end at 0x01EE
BLT newLS_scroll
LDI ON_BOTTOM_ROW_BIT
ORW miscFlags
STW miscFlags ; set on bottom row flag
newLS_exit LDWI printInit
CALL giga_vAC ; re-initialise the SYS registers
POP
RET