искал инфу в интернетах, нашел заметку преобразования шестнадцатиричного числа в текст. Часть кода мне была уже известно, но попалось новое:
Интересно, будет ли работать такое (для hex->bin):
mov ah,al
shr ah,4
xor ah,33h
sub al,ah
Не знаю, для чего, но код не заработал ни на x86, ни на z80.
Нашел еще одно решение для 6502:
;binhex: CONVERT BINARY BYTE TO HEX ASCII CHARS
;
; ————————————————————————————————————
; Preparatory Ops: .A: byte to convert
;
; Returned Values: .A: MSN ASCII char
; .X: LSN ASCII char
; .Y: entry value
; ————————————————————————————————————
;
binhex pha ;save byte
and #001111 ;extract LSN
tax ;save it
pla ;recover byte
lsr ;extract...
lsr ;MSN
lsr
lsr
pha ;save MSN
txa ;LSN
jsr .0000010 ;generate ASCII LSN
tax ;save
pla ;get MSN & fall thru
;
;
; convert nybble to hex ASCII equivalent...
;
.0000010 cmp #$0a
bcc .0000020 ;in decimal range
;
adc #$66 ;hex compensate
;
.0000020 eor #110000 ;finalize nybble
rts
такое вряд ли сработает, потому что у Apple II другая кодировка символов. Короче, вот решение:
device zxspectrum128
ORG #6000
begin
;костылек ужясма
LD HL ,$5CB6
LD ($5C4F),HL
LD DE ,$15AF
LD BC ,$0015
EX DE ,HL
LDIR
EX DE ,HL
DEC HL
LD ($5C57),HL
INC HL
LD ($5C53),HL
LD ($5C4B),HL
LD (HL) ,$80
INC HL
LD ($5C59),HL;E-LINE
;2
ld hl,$15C6
ld de,$5C10
ld bc,$0E
ldir
;открытие потока
ld a,2
call $1601
ld a,22
rst 10h
xor a
rst 10h
rst 10h
; jr $
tt:
push af
cp 10
jr nc,nodigit
;0-9
add a,$30-$41+10
nodigit:
add a,$41-10
rst 10h
pop af
inc a
cp 16
jr nz,tt
jr $
end
display /d,end-begin
savesna "!void.sna",begin
Первая часть кода для ассемблера sjasmplus, т.к. в снапшоте неправильные системные переменные, и при печати происходит сброс. Остаток - сам код. 8 байт - хоть и не предел, но заработает и в Бейсике.
Комментарии
Отправить комментарий