SYMBOL en CP/M Plus

Programando el Amstrad en Ensamblador.
Reglas del Foro
Debido a que hay varios temas pidiendo ayuda para programar en ensamblador máquinas distintas al Amstrad CPC, con micro distinto al Z80 y que incluso dependen del sistema operativo, nos vemos en la necesidad de poner por escrito que estos posts son bienvenidos pero que no es el lugar adecuado ya que por estos lares nos dedicamos más al ensamblador del Z80, un microprocesador de 8 bits que tuvo su gran auge en ordenadores y consolas de los años 80.

De todas formas, esto no quita que alguien que sepa del asunto pueda postear alguna respuesta pero es más fácil encontrar foros dedicados a programar en ensamblador en Windows o MS-DOS que ayudarán más que nosotros:
http://www.lawebdelprogramador.com/news ... nsamblador
Avatar de Usuario
NotFound
Me voy lanzando
Me voy lanzando
Mensajes: 36
Registrado: Mié 17 Ene , 2007 4:31 pm

SYMBOL en CP/M Plus

Mensajepor NotFound » Mar 15 Feb , 2022 3:01 pm

Inspirado por un post en cpcwiki he hecho este programilla para redefinir caracteres en el CP/M Plus del CPC.

Funciona como el SYMBOL de Locomotive Basic pero usando solo espacios como separador.

Usa la rutina del firmware, así que es solamente para CPC.

Se pueden redefinir todos los caracteres, como con SYMBOL AFTER 0 en Basic.

SYMBOL.ASM

Código: Seleccionar todo

; Symbol
; The Basic SYMBOL command in Amstrad CPC CP/M PLus

; CP/M page 0 address
bios_jumps equ 1
argline equ 00080h

; CPC firmware address
txt_set_matrix equ 0BBA8h

start:
org 100h

call init_data

ld hl, argline + 1

call skip_spaces
call get_num

ld a, b
ld [charcode], a

ld de, chartable
nextvalue:
call skip_spaces
or a
jr z, doit
cp 0Dh
jr z, doit
call get_num
ld a, b
ld [de], a
inc de
jr nextvalue

doit:
ld a, [charcode]
ld hl, chartable
call do_userf
dw txt_set_matrix
call 0

skip_spaces:
ld a, [hl]
cp ' '
ret nz
inc hl
jr skip_spaces

get_num:
ld b, 0
digit:
; Multipliy by 10
ld a, b
add a, a
ld b, a
add a, a
add a, a
add a, b
ld b, a
; Add current digit
ld a, [hl]
sub '0'
add a, b
ld b, a
inc hl
ld a, [hl]
cp ' '
ret z
cp 0Dh
ret z
cp 0
ret z
jr digit

init_data:
; Fill the character data with 0
ld hl, chartable
xor a
ld b, 8
init_more:
ld [hl], a
inc hl
djnz init_more
ret

;---------------------------------------
do_userf:
push hl
push de
ld hl, [bios_jumps]
ld de, 057h ; Offset to USERF
add hl, de
pop de
ex [sp], hl
ret

;---------------------------------------
charcode db 0

; Must be in the high 16K
chartable equ 0C000h

end start
;---------------------------------------
Para el que no tenga ensamblador Z80 a mano, versión ensamblada a hex para usar con HEXCOM:

SYMBOL.HEX

Código: Seleccionar todo

:10010000CD5501218100CD3301CD3A0178326C010A
:100110001100C0CD3301B7280CFE0D2808CD3A01DF
:1001200078121318EE3A6C012100C0CD6001A8BB13
:10013000CD00007EFE20C02318F90600788747878F
:100140008780477ED6308047237EFE20C8FE0DC8BC
:10015000FE00C818E72100C0AF0608772310FCC9CD
:0D016000E5D52A010011570019D1E3C900AF
:00000001FF
Eso es todo, amigos!
Salu2

Poliyo
Keeper of The Forum
Keeper of The Forum
Mensajes: 909
Registrado: Jue 12 May , 2016 10:07 pm
Ubicación: Valencia

Re: SYMBOL en CP/M Plus

Mensajepor Poliyo » Mar 15 Feb , 2022 4:43 pm

Que guay, un código para trastear, gracias, a ver si saco tiempo...


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic