Компиляция простой программы с использованием ca65
Я начинаю изучать сборку 6502, используя книгу Родни Закса "Программирование 6502. В ней есть пример кода, я хотел бы иметь возможность запустить его на своем MacBook. Я надеюсь, что код сможет работать в том виде, в котором он представлен в книге, но я не уверен.
Я скачал ассемблер ca65, но у меня возникли некоторые проблемы. Команда ca65 3_1.as
работает, но следуя этому с ld65 -o example 3_1.o
(что я считаю правильным) привело к ошибке: ld65: Error: Memory configuration missing
Код из файла 3_1.as
ниже.
Кто-нибудь может посоветовать, как решить мою проблему?
(В качестве небольшого побочного вопроса, на данный момент я предполагаю, что $100 и $200 на самом деле не содержат никаких значений, поэтому никакое фактическое добавление не будет выполнено, даже если программа сможет работать, это правильно?)
CLC ; CLEAR CARRY BIT
CLD ; CLEAR DECIMAL BIT
ADR1 = $100 ; WHERE IN MEMORY ARE THESE THINGS
ADR2 = $200
ADR3 = $300
LDA ADR1 ; LOAD CONTENTS OF ADR1 INTO ACCUMULATOR
ADC ADR2 ; ADD CONTENTS OF ADR2 INTO ACCUMULATOR
STA ADR3 ; TRANSFER CONTENT OF ACC TO ADR3
1 ответ
Чтобы исправить ошибку компоновщика, вам нужно предоставить целевую систему, которая будет предоставлять конфигурацию памяти.
Например, немного глупо, что это не по умолчанию:
ld65 -t none -o example 3_1.o
Обратите внимание, что вы также можете собрать и связать с помощью одной команды. Смотрите мой ответ здесь.
Here is a more complete program to add to the already good answers. I noticed the author didn't put in a place to start the program either. Different types of assemblers have minor ticks about how they handle syntax like the ORG statement. Some are ".Org" which means start the program here and assemble up the way in memory. "*=" can also signify the same thing (sometimes both work). This program should work on a commodore 64. With a few tweaks it can work on an Apple ][ as well(change charout to ffda and the start location). I would definitely recommend the C64 for coding growth though since it has so many more interesting hardware capabilities. It also has a massive global coding scene. Here is a link for a large volume of disk mags and ML tutorials that go beyond the basics. No books seem to do that and tend to stick to syntactical approaches only. Which is far from useful if you want to do anything big with this stuff like control houses and run aircraft components.
https://csdb.dk/release/?id=8717
.ORG = 080D ;
CLC ; CLEAR CARRY BIT
CLD ; CLEAR DECIMAL BIT
LDA #$94 ; load accumulator with 94
STA ADR1 ; move 94 into adr1 (both combined is adr1 = 94)
LDA #$32 ; load accumulator with 32
STA ADR2 ; move 32(in Acc.) into adr1 (both lines is adr2 = Acc, or adr2 = 32)
LDA ADR1 ; LOAD CONTENTS OF ADR1 INTO ACCUMULATOR
ADC ADR2 ; ADD CONTENTS OF ADR2 INTO ACCUMULATOR
STA ADR3 ; TRANSFER CONTENT OF ACC TO ADR3
JSR CHAROUT; print the result
RTS ; return from the program
; declarations can be in confusing places and still work.
; I just saw a program where the declarations were after the code
; and before the subroutines.
;-------------------------------------------
ADR1 = $100 ; WHERE IN MEMORY ARE THESE THINGS
ADR2 = $200
ADR3 = $300
CHAROUT = $ffd2 ; character out routine commodore 64. (prints a byte to screen)