Отправил в личку.
Вид для печати
Отправил в личку.
Залил исправленный вариант, дело было в метках. Но на пробелы пока не смотрел.
Ещё одна непонятка. В питоновской версии появляется лабел 2400 +4, в онлайновской такого нет.
Еще баг или фича в питоновской версии
66 - это код маленькой fКод:
08A7 3E 66 mvi a,'F'
08A9 01 07 C0 lxi b,$C007
08AC CD FA 08 call print_simA
08B7 3E 68 mvi a,'H'
08B9 01 07 C3 lxi b,$C307
08BC CD FA 08 call print_simA
68 - это код маленькой h
Код:artyr2@suxoy:~/Загрузки/Vector/CART/my_prog/prettyasm$ ./pasm.py keyscan_test.asm
Traceback (most recent call last):
File "./pasm.py", line 1004, in <module>
main(sys.argv[1:])
File "./pasm.py", line 987, in main
jsons() +
File "./pasm.py", line 870, in assemble
size = parseInstruction(encodedLine, addr, line, regUsage)
File "./pasm.py", line 721, in parseInstruction
size = evaluateExpression(' '.join(parts[1:]), addr)
NameError: global name 'evaluateExpression' is not defined
онлайновский транслирует эту программуКод:; 8080 assembler code
.hexfile keyscan_test.hex
.binfile keyscan_test.r0m
; try "hex" for downloading in hex format
.download bin
.objcopy objcopy
.postbuild echo "Gotovo!"
;.nodump
.org $0
jmp start
.org $38
RST7:
jmp INTRPT
.org $100
STKEY: db 01000010b
;статус клавиатуры
NEWKEY: ds 9
OLDKEY: ds 9
KEYBUF: ds 16
RPTKEY: db 13
INTRPT: push h
push d
push b
push psw
lxi h,STKEY
mov a,m
xri 10000b
mov m,a
ani 10000b
;scan or code?
jz KEYWRK
in 3
sta SCRL+1
mvi a,8Ah
out 0
mov a,m
out 1
mov c,a
inx h
in 1
ori 11111b
mov m,a
mvi b,11111110b
int1: mov a,b
out 3
rlc
mov b,a
in 2
inx h
mov m,a
jc int1
mvi a,88h
out 0
mov a,c
out 1
mvi a,0 ;10000b
out 2
SCRL: mvi a,0 ;dummy
out 3
intf: pop psw
pop b
pop d
pop h
ei
ret
KEYWRK: lxi h,intf
push h
lxi h,0A6AEh
;'xra m, ana m
shld PRESS7 ;@PRESS
;seach for new pressed keys
call PRESS6 ;PRESS?
rnz
lxi h,RPTKEY
dcr m
rnz
inr m
lxi h,0B72Fh
;'cma, ora a
shld PRESS7 ;@PRESS
jmp pres5
PRESS6: lxi h,OLDKEY+8
lxi d,NEWKEY+8
mvi b,9
pres1: ldax d
cmp m
dcx h
dcx d
jnz pres2
dcr b
jnz pres1
MSXOB: lxi h,0
mov a,l
sub h
rat
pres2: mvi a,13
sta RPTKEY
pop h ;-1 ret
pres5: lxi h,OLDKEY+8
lxi d,NEWKEY+8
mvi c,64
pres3: ldax d
mov b,a
PRESS7: nop ;ana m cma
nop ;xra m ora a
mov m,b
jz nokey
;поиск бита
push h
push d
push b
mvi b,8
kcod1: dcr c
rlc
cc putbuf
dcr b
jnz kcod1
pop b
pop d
pop h
nokey: dcx h
dcx d
mov a,c
sui 8
mov c,a
jnz pres3
;else mode keys
ldax d
cmp m
rz
mov m,a
dcx d
cpi 10011111b
;US+SS?
mvi b,00100000b
;CAPS switch
jz ccod1
cpi 01011111b
;RUS+SS?
mvi b,01000000b
;QWER/JCUK switch
jz ccod1
ani 10000000b
;RUS?
rnz
mvi b,10001000b
;Rus & lamp switch
ccod1: ldax d
xra b
stax d
rat
putbuf: push psw
;push or don't modify BC!
lxi h,KBUF
push h
mov a,c
cpi 63 ;space?
mvi a,32
rz
;... ... etc.
mov a,c
cpi 11h ;1
mvi a,33
rz
mov a,c
cpi 07h ;DOWN
mvi a,07h
rz
mov a,c
cpi 05h ;UP
mvi a,05h
rz
KBUF: mov e,a
lhld MSXOB+1 ;Загрузить в HL содержимое ячейки с адресом a16
mov a,l
inr a ;инкрементировать A
ani 15 ;Логическое И непосредственные данные с A
cmp h ;Сравнить A с H
jz kbuf1
sta MSXOB+1 ;Записать A по адресу a16
mvi a,1
out 0
mov a,l
lxi h,KEYBUF
add l
mov l,a
jnc adhla
inr h
adhla: xra a
out 0
mov m,e
kbuf1: pop psw
rat
start:
ei
cicl:
nop
jmp cicl
Код:A38SC2: STA DRS1+1
STA DRS2 + 1
Код:0234 32 ?? ?? A38SC2: STA DRS1+1
0237 32 03 03 STA DRS2 + 1
Код:A38SC2: STA DRS1 + 1
STA DRS2 + 1
на питоне не понимает если нет пробелов, он лайновый транслирует правильно и без пробеловКод:0234 32 EC 02 A38SC2: STA DRS1 + 1
0237 32 03 03 STA DRS2 + 1
artyr_n, посмотрю вскоре.
Поправил несколько проблем, эти примеры должны теперь проходить. Еще :)
Спасибо большое за обновление. Продолжу выступать бета тестером.
И в оффлайновом и в онлаоновом натолкнулся на следующее
Код:test100:
nop
lxi h,DWWSS
ldax h
mvi a,0
stax h
jmp test100
ldax h - такой команды нет, подсветки в листинге что команда ошибочна не было,Код:test100:
01C8 00 nop
01C9 21 BC 03 lxi h,DWWSS
01CC 2A ldax h
01CD 3E 00 mvi a,0
01CF 22 stax h
01D0 C3 C8 01 jmp test100
вместо нее был подставлен код 2A команда LHLD a16 Загрузить в HL содержимое ячейки с адресом a16, эта команда трех байтовая байт команды и два байта адреса и как следствие следующая команда mvi a,0 превратилась в адрес для нее.