нечитаторы мана по ужасм и ниасиляторы ужасм в треде!
;--------------------------------------------------------------------
macro sectors datab,datae
IF low (datae-datab)=0
db 1,5,high (datae-datab)
ELSE
db 1,5,(1+high (datae-datab))
ENDIF
endm
MODULE boot
Basic:
db #00,#01;номер строки
DW EndLine1 - Line1
Line1:
db #EA;REM
ld sp,#5FE0
xor a:out ($FE),a
ld hl,$5AFF,de,$5AFE,bc,6912,(hl),0:lddr
;----------------------------demo------------
di
;pic
ld de,(#5CF4)
ld hl, #4000
sectors titl_b,titl_e
call #3d13
;demo
ld a,#10,bc,#7FFD:out (c),a
ld de,(#5CF4)
ld hl, #6000
sectors begin,end
call #3d13
;p0
ld de,(#5CF4)
ld hl, #C000
sectors page0b,page0e
call #3d13
;p1
ld a,#11,bc,#7FFD:out (c),a
ld de,(#5CF4)
ld hl, #C000
sectors page1b,page1e
call #3d13
;p3
ld a,#13,bc,#7FFD:out (c),a
ld de,(#5CF4)
ld hl, #C000
sectors page3b,page3e
call #3d13
;p4
ld a,#14,bc,#7FFD:out (c),a
ld de,(#5CF4)
ld hl, #C000
sectors page4b,page4e
call #3d13
;p6
; ld a,#16,bc,#7FFD:out (c),a
; ld de,(#5CF4)
; ld hl, #C000
; sectors page6b,page6e
; call #3d13
;p7
ld a,#17,bc,#7FFD:out (c),a
ld de,(#5CF4)
ld hl, #DD00
sectors page7b,page7e
call #3d13
jp #6000
db "AAA-stupid moron"
db #0D
EndLine1:
db #00,#02
DW EndLine2 - Line2
Line2:
db #20,#FD,#B0
db #22,#32,#34,#35,#37,#35,#22;clear val "24575"
db #3A; :
db #F9,#C0,#28,#35;randomize usr (5+256*peek val "23635"+peek val "23636"
db #0E,#00,#00,#05,#00,#00,#2B
db #32,#35,#36
db #0E,#00,#00,#00,#01,#00,#2A,#BE
db #B0
db #22,#32,#33,#36,#33,#36,#22;"23635"
db #2B;???
db #BE
db #B0
db #22,#32,#33,#36,#33,#35,#22;"23636"
db #29,#0D;)
db #80
db #AA,1,0;;;;;;;;;;;;;autorun line,change program length to -4, e.g. 83-4=79
EndLine2:
EndBasic:
ENDMODULE
EMPTYTRD "verita.trd" ;create empty TRD image
SAVETRD "verita.trd", "boot.B", boot.Basic, boot.EndBasic - boot.Basic
savetrd "verita.trd","pic.C",titl_b,titl_e-titl_b
savetrd "verita.trd","demo.C",begin,end-begin
page 0
savetrd "verita.trd","p0.C",page0b,page0e-page0b
сборка:
sjasmplus man.asm
if errorlevel 1 goto :exit
:exit
pause
Если нужны дополнительные файлы, размер которых не больше 16384 байт, то удобнее раскидать по страницам и сохранять на .TRD непосредственно при сборке.
Если файл не помещается. поможет Writetrd.exe(наверное)
Для 6502 не помешает ссылка на перевод система команд 6502.
А с чего начать? с изучения платформы конечно же. Быстро для Atari и Apple II вряд ли получится.
принцип работы стека знаешь? надеюсь, что знаешь)
но на всякий случай — первый пришел, последний ушел.
допустим мы стек бросаем значения
1, 2, 3, 4.
на вершине стека у нас значение 4.
что бы достать значение 1, то надо стек разобрать в обратном порядке — достаем 4,3,2,1
Я так понял, там какая-то работа со стеком, но не очень допер, что и как реально работает.
Артем, смотри — объясню как умею и понимаю:
когда процессор встречает команду call <адрес>, то он бросает на стек содержимое регистра PC+3, меняет значение PC на <адрес> и продолжает выполнение. т.е. следующая команда будет браться уже из <адрес>. а когда встречается команда ret, то берется значение с вершины стека и пихается в PC, потом опять же идет продолжение выполнения программы.
командами push/pop ты сохраняешь/восстанавливаешь значения регистров в стек/ из стека. и соответственно косвенно изменяешь значение регистра SP (указатель на вершину стека). и если ты запихал в стек допустим 2 регистра, а восстановил 1, то при выполнении команды ret со стека возьмется что? правильно — хрень! и выполнение программы начнеться по направлению неведомой черной дыры :)
вот как-то так
Ну вот синтетический пример реализации GOSUB/RETURN. Ничего полезного не делает, но принцип вроде понятен.
ld a, #01
call SUB ; вызываем процедуру SUB с параметром #01
halt
ld a, #fe
call SUB ; еще раз вызываем процедуру SUB с параметром #FE
di : halt ; стоп машина
; Собственно процедурура SUB
; A - параметр, с которым она играется
SUB
ld b, a
xor a ; наигрались :-)
ret ; возвращаемся туда, откуда пришли
Омар Хайям
сборка:
Если нужны дополнительные файлы, размер которых не больше 16384 байт, то удобнее раскидать по страницам и сохранять на .TRD непосредственно при сборке.
Если файл не помещается. поможет Writetrd.exe(наверное)
А с чего начать? с изучения платформы конечно же. Быстро для Atari и Apple II вряд ли получится.
но на всякий случай — первый пришел, последний ушел.
допустим мы стек бросаем значения
1, 2, 3, 4.
на вершине стека у нас значение 4.
что бы достать значение 1, то надо стек разобрать в обратном порядке — достаем 4,3,2,1
Артем, смотри — объясню как умею и понимаю:
когда процессор встречает команду call <адрес>, то он бросает на стек содержимое регистра PC+3, меняет значение PC на <адрес> и продолжает выполнение. т.е. следующая команда будет браться уже из <адрес>. а когда встречается команда ret, то берется значение с вершины стека и пихается в PC, потом опять же идет продолжение выполнения программы.
командами push/pop ты сохраняешь/восстанавливаешь значения регистров в стек/ из стека. и соответственно косвенно изменяешь значение регистра SP (указатель на вершину стека). и если ты запихал в стек допустим 2 регистра, а восстановил 1, то при выполнении команды ret со стека возьмется что? правильно — хрень! и выполнение программы начнеться по направлению неведомой черной дыры :)
вот как-то так