Hola mundo 6502
Ayer pude ejecutar mi primer programa en código para el 6502 en mi proyecto. El programa lo escribí en ensamblador y se puede compilar con CC65.
; hello.s ; Hello World example for D64 using syscalls ; .segment "CODE" .macro sys ; syscall .byte $02 .endmacro main: tsx ; save the stack pointer lda #>message pha lda #<message pha lda #$11 ; put string sys txs ; restore the stack lda #$00 ; terminate program pha ; also: success (0) sys jmp * ; never gets here message: .asciiz "Hello world from 6502!"
Mi máquina virtual que ejecuta código del 6502
tiene una configuración estándar para este tipo de CPU
, con el siguiente mapa de memoria:
0x0000 - 0x00ff | Zero page |
0x0100 - 0x01ff | Stack |
0x0200 - 0x19ff | Vídeo |
0x1a00 - 0xffff | Programa |
No sé todavía si intentaré ejecutar programas existentes para esta CPU
porque normalmente dependerán de un interfaz que cambia con la máquina que lo usa (no es lo mismo un Commodore 64
que un Appel II
), pero sí quería ser lo más fiel posible al diseño del 6502
para poder usar compiladores existentes sin mucho trabajo.
Además está claro que los programas que ejecute estarán compilados expresamente para mi máquina, así que puedo añadir una instrucción extra para usar funciones de la máquina virtual implementadas en código nativo del ATmega328p
(¡más rápido!).
La instrucción extra es SYS
(de syscall, o llamada al sistema) que usa el opcode 0x02
(que es una operación ilegal en el 6502
), y el intefaz es sencillo: la función se indica en el acumulador, los parámetros en la pila, y es el origen el responsable de desapilar (porque la función puede devolver valores usando la pila). Más o menos es el mecanismo que usa FreeBSD (Linux
usa registros para los parámetros, y el 6502
solo tiene tres, así que no es práctico).
En el hola mundo
estoy usando dos funciones: imprimir una cadena de texto acabada en un cero (función 0x11
) y terminar programa (función 0x00
).
Aún quedan muchas cosas por hacer, pero este era un paso importante en el proyecto. El resultado se puede ver en este vídeo.
Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.