gigatron/extensions/sound card/gasm/BOMB.gasm
2025-01-28 19:17:01 +03:00

118 lines
2.8 KiB
Plaintext

start EQU 0x200
wr377 EQU 0x08A1
SYS_ExpanderControl_v4_40 EQU 0x0b09
SYS_SpiExchangeBytes_v4_134 EQU 0x0b15
sysFn EQU 0x22
sysArgs0 EQU 0x24
sysArgs2 EQU 0x26
sysArgs4 EQU 0x28
sysArgs6 EQU 0x2A
Temp EQU 0x81
Counter EQU 0x83
TLow EQU 0x84
THigh EQU 0x85
IOAddr EQU 0x84
OutValue EQU 0x85
j EQU 0x86
i EQU 0x87
frame EQU 0x9E
giga_frameCount EQU 0x0E
_startAddress_ EQU 0x0200
_callTable_ EQU 0x007E
start LDWI SYS_ExpanderControl_v4_40
STW sysFn
LDWI 0x0100 ; /WR auf high
SYS 40
LDI 0x9f ; ton 1 aus
CALL wr76489
LDI 0xbf ; ton 2 aus
CALL wr76489
LDI 0xdf ; ton 3 aus
CALL wr76489
LDI 0xff ; rauschen aus
CALL wr76489
LDI 0x90
CALL wr76489
LDI 0x05
ST j
loopJ LD j ; FOR J=5 TO 17
SUBI 0x12 ; 0x12=18=Abbruch
BEQ NextJ
LDI 0x80
ST i
loopI LD i ; FOR I=128 TO 143
SUBI 0x90 ; 0x90=144=Abbruch
BEQ NextI
LD i
CALL wr76489 ; OUT N, I (0x80..8F)
LD j
CALL wr76489 ; OUT N, J (0x05..11)
LDWI -150 ; FOR D=0 TO 10; NEXT D; REM DELAY LOOP 10ms [-300 ~20..23ms]
STW Temp
wait1 LDW Temp ; delay
ADDI 0x01
STW Temp
BNE wait1
INC i
BRA loopI
NextI INC j ; nach NEXT I
BRA loopJ
NextJ LDI 0x9f ; nach NEXT J / ton 1 aus
CALL wr76489
LDI 0xe4 ; 0xe4=228 rauschen auf maximum
CALL wr76489
LDI 0xf0 ; 0xe4=240
ST i
loopI2 LD i ; FOR I=240 TO 255
SUBI 0x00
BEQ NextI2
LD i
CALL wr76489
LDWI -1600 ; FOR D=0 TO 75; NEXT D; REM DELAY LOOP 114ms [-300 ~180..182ms]
STW Temp
wait2 LDW Temp ; delay
ADDI 0x01
STW Temp
BNE wait2
INC i
BRA loopI2
NextI2 LDWI -30000 ; maximum warteschleife [0 ~ 4,9s | 1 ~ 76,3µs]
STW Temp
wait3 LDW Temp ; delay
ADDI 0x01
STW Temp
BNE wait3
BRA start ; nach NEXT I
wr76489 ST OutValue
LDWI SYS_ExpanderControl_v4_40
STW sysFn
LDI 0x10 ; DEVADDR0 = 0x00, DEVADDR1 = 0x10
ST IOAddr
LDW IOAddr ; vAC = (0x82,0x83) Low Byte = DEVADDRx, High Byte = Data = Couter
SYS 40
LDWI 0x0000 ; /WR low
SYS 40
LDWI 0x0100 ; dalay 8µS nötig
LDWI 0x0100 ; /WR high
SYS 40
RET