例如發出音樂的組合語言程式碼放在位址 十六進位300
首先在BASIC用類似這一段
100 FOR I = 0 TO 30
110 READ A
120 POKE 768+I, A
130 NEXT I
......
900 DATA 160, 203, 182, 35, ....... (這是我隨便編的數字,實際上應該是6502的指令,把十六進位轉換為十進位)
呼叫組合語言:
用BASIC指令 CALL 768 (3 * 256 + 0 * 16 + 0)
像是
POKE 780, 12
CALL 768
POKE 780, 15
CALL 768
POKE 780, 17
CALL 768
總共發出三個不同頻率的聲音
MPF-II無法用LISA寫組合語言,只能靠自己查指令的編號,並且把位址的高低bytes互相對調,像 FC58 --> 58 FC
MPF-III可以用LISA,寫組合語言很方便,但我當年並未投入時間深入學習,只有一點點概念。
我比較有印象的是
20 58 FC (即是 JSR FC58 作用等於 BASIC 的 HOME 清除螢幕) 在 BASIC 也可用 CALL -936 來呼叫
JSR 是 Jump Subroutine
4C 是 JMP 直接跳到位址
6C 是 JMP 參考位址,即是跳到位址所指示的另一個位址
暫存器指令有
LDX (Load X), STX (Store X), LDY (Load Y), STY (Store Y), LDA, STA 等
而 TAX 指令是把 A 與 X 的數值交換 (swap)
TAY: A <--> Y
零頁 (zero page)的使用很有趣,
像有些錄音帶為了作保護,在 36, 37 (跳躍向量) 填入位址,程式就自動跳去執行。 指令6C 36 00 (JMP (0036))
零頁還儲存不少設定,像是 SPEED (PRINT的速度),位址我忘了。
3F2, 3F3 儲存一個位址,按了Reset鍵,會跳到設定的位址,但必須 3F4儲存一個經過 XOR運算的數字,若不符合,會變成 cold restart,記憶體資料清除,不能跳到該位址。某些錄音帶的Game,按了Reset會回到Game起點,就是利用3F2作的。
關閉廣告