Entre otras cosas, tengo una Wiznet para en un futuro trastear con el CPC, muchas utilidades sencillas (Ping, FTP, etc) son un tanto poco practicas para andar cargando por el metodo MEMORY/LOAD/CALL, y andar con cargadores BASIC me parecen un poco incomodos, prefiero tener un unico fichero.
Subo el "Hello World" autoejecutable desde el Ready con RUN"DISC" y con retorno al BASIC
Basicamente la ñapa es esta:
Editar el CRT0_CPC.S y agregar esto en el area HEADER antes del Reset Vector:
Código: Seleccionar todo
.org 0x170 ;;BASIC LOADER
.db 0x0A,0x00,0x0A,0x00,0x83,0x20,0x1C,0x80,0x01,0x00,0x06,0x00,0x14,0x00,0xB1,0x00,0x00,0x00
Quedando asi:
Código: Seleccionar todo
.area _HEADER (ABS)
.org 0x170 ;;BASIC LOADER
.db 0x0A,0x00,0x0A,0x00,0x83,0x20,0x1C,0x80,0x01,0x00,0x06,0x00,0x14,0x00,0xB1,0x00,0x00,0x00
;; Reset vector
.org 0x185 ;; Start from address &185
jp init
.org 0x195
Lo que hemos agregado es simplemente este programa BASIC tokenizado justo en el area de memoria donde lo carga BASIC
El reset vector que era el antiguo punto de entrada se reemplaza a &185 y por eso el CALL apunta a esa direccion. Pero el nuevo punto de entrada lo falseamos al programa BASIC tokenizado en &170
Ya con nuestro nuevo CRT0_CPC compilamos el hello world
En el MAKE.BAT:
Código: Seleccionar todo
sdcc -mz80 --code-loc 0x1BB --data-loc 0 --no-std-crt0 crt0_cpc.rel
....(cosas)
managedsk -C -Isdcc01.bin/disc.bin/BAS/368/0 -Sdisc.dsk
nuestro codigo entraria en la siguiente zona libre de memoria, en &1BB. Y aunque usemos extension BIN, lo metemos con cabecera BASIC y su direccion de carga y ejecucion caracteristicos de los BASIC.
Ahora con un RUN"DISC" vemos el hello world y vuelta al Ready
La memoria BASIC se limpia gracias al NEW de la linea 20
EDIT: Al partir de un BASIC desprotegido, no se puede proteger simplemente cambiando la cabecera con ManageDSk o CPCDiskXP, habria que partir del mismo programa BASIC protegido y modificar el bloque tokenizado
(He probado a modificar la cabecera BASIC a BASIC protegido y da error)
EDIT2: Por cierto, uso el CRT0_CPC que ha modificado Mochilote para inicializacion de variables
EDIT3: Mochi, si lo ves conveniente, y si vas a reactualizar los tutoriales con tu nuevo CRT0_CPC, sin problema que agreges mi parchecillo como anexo al tutorial Hello World, o si prefieres hacer un tutorial aparte con la ñapa