NESASMのBG描きこみルーチンについて
Posted: 2010年5月31日(月) 17:35
ファミコンソフトをC言語で作るのは実用的ではないと思いまして、ファミコンのアセンブリ言語を
使っています。そこで問題が生じました。以下のC言語で実装したBG描きこみルーチンを
6502のアセンブリ言語で実装しようとしたらエラーが出てしまいました。
どうすればエラーを回避し、思い通りの結果が期待できるでしょうか?
どうかみなさまお力を貸してください。
あと、アセンブリ言語でもこの掲示板に書き込むのは適切だったでしょうか…?
他に有名なアセンブリ言語の掲示板を知らないので良かったらそちらも教えていただくと嬉しいです。
void DrawBG(unsigned char x,unsigned char y,unsigned char number)
{
  int adr;
  adr = (y-1)*32+x;
  *(char*)0x2006 = 0x20+adr/256;
  *(char*)0x2006 = adr;
  *(char*)0x2007 = number;
}
C言語で記述するとこうなるのですが、NESASMというファミコン用のアセンブラでこうなるように
記述してみたのですが、エラーが出てしまいます。
Sum EQU $0010
Count EQU $0011
AA EQU $0012
B EQU $0013
A2 EQU $0014
B2 EQU $0015
Sum2 EQU $0016
ADR EQU $0017
XX EQU $0018
YY EQU $0019
NUM EQU $0020
Div:
lda AA
sta Sum
lda #$00
sta Count
lda Sum
loop:
inc Count
sbc B
bne loop
rts
Mul:
lda #$00
sta Sum2
loop2:
ldx B2
adc A2
dex
bne loop2
sta Sum2
rts
wrtBG:
lda YY
dec a
lda YY
sta A2
lda #32
sta B2
jsr mul
lda Sum2
adc XX
sta ADR
lda ADR
sta AA
lda #256
sta B
jsr div
lda Count
adc #$20
sta $2006
lda ADR
sta $2006
lda NUM
sta $2007
rts
エラーは次のとおりです。
Microsoft (R) KKCFUNC バージョン 1.10
Copyright (C) Microsoft Corp. 1991,1993. All rights reserved.
KKCFUNC が組み込まれました.
マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993
NES Assembler (v2.0)
#[1] PUTSTRING.ASM
131 03:0038 jsr mul
Undefined symbol in operand field!
137 03:004A lda #256
Incorrect immediate value!
139 03:004D jsr div
Undefined symbol in operand field!
# 3 ERROR(s)
C:\DOCUME~1\HP\デスク~1\PUTSTR~1>
使っています。そこで問題が生じました。以下のC言語で実装したBG描きこみルーチンを
6502のアセンブリ言語で実装しようとしたらエラーが出てしまいました。
どうすればエラーを回避し、思い通りの結果が期待できるでしょうか?
どうかみなさまお力を貸してください。
あと、アセンブリ言語でもこの掲示板に書き込むのは適切だったでしょうか…?
他に有名なアセンブリ言語の掲示板を知らないので良かったらそちらも教えていただくと嬉しいです。
void DrawBG(unsigned char x,unsigned char y,unsigned char number)
{
  int adr;
  adr = (y-1)*32+x;
  *(char*)0x2006 = 0x20+adr/256;
  *(char*)0x2006 = adr;
  *(char*)0x2007 = number;
}
C言語で記述するとこうなるのですが、NESASMというファミコン用のアセンブラでこうなるように
記述してみたのですが、エラーが出てしまいます。
Sum EQU $0010
Count EQU $0011
AA EQU $0012
B EQU $0013
A2 EQU $0014
B2 EQU $0015
Sum2 EQU $0016
ADR EQU $0017
XX EQU $0018
YY EQU $0019
NUM EQU $0020
Div:
lda AA
sta Sum
lda #$00
sta Count
lda Sum
loop:
inc Count
sbc B
bne loop
rts
Mul:
lda #$00
sta Sum2
loop2:
ldx B2
adc A2
dex
bne loop2
sta Sum2
rts
wrtBG:
lda YY
dec a
lda YY
sta A2
lda #32
sta B2
jsr mul
lda Sum2
adc XX
sta ADR
lda ADR
sta AA
lda #256
sta B
jsr div
lda Count
adc #$20
sta $2006
lda ADR
sta $2006
lda NUM
sta $2007
rts
エラーは次のとおりです。
Microsoft (R) KKCFUNC バージョン 1.10
Copyright (C) Microsoft Corp. 1991,1993. All rights reserved.
KKCFUNC が組み込まれました.
マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993
NES Assembler (v2.0)
#[1] PUTSTRING.ASM
131 03:0038 jsr mul
Undefined symbol in operand field!
137 03:004A lda #256
Incorrect immediate value!
139 03:004D jsr div
Undefined symbol in operand field!
# 3 ERROR(s)
C:\DOCUME~1\HP\デスク~1\PUTSTR~1>