Добавлены разделы по передаче параметров в функции на ассемблере и возврату значений в С.
Добавлен глоссарий по утилитам и прочему.
https://github.com/salextpuru/sdcc-n...dcc-noinit.pdf
Вид для печати
Добавлены разделы по передаче параметров в функции на ассемблере и возврату значений в С.
Добавлен глоссарий по утилитам и прочему.
https://github.com/salextpuru/sdcc-n...dcc-noinit.pdf
Добавлены примеры функций, иллюстрирующие передачу и возврат значений.
Каталог apps/example-0. Добавлено описание примеров в документацию. (раздел 4.6. Примеры функций на ассемблере)
https://github.com/salextpuru/sdcc-n...dcc-noinit.pdf
Тема уехала сюда: http://zx-pk.ru/threads/25944-s-chego-nachat/page9.html
Смотрелка TZX.
Скрытый текст
Код:/* TZXView */
OPTIONS AREXX_BIFS
OPTIONS AREXX_SEMANTICS
PARSE ARG TZXFILE
IF TZXFILE='?' THEN DO
OPTIONS PROMPT 'FILE/A: '
PARSE PULL TZXFILE
END
IF TZXFILE='' THEN DO
SAY 'required argument missing'
SAY 'No file to view'
EXIT
END
TZXFILE=STRIP(TZXFILE,,'"')
TZXFILE=STRIP(TZXFILE,,' ')
IF ~OPEN(FILE,TZXFILE,'R') THEN DO
SAY 'No file to view'
EXIT
END
IF READCH(FILE,8)~='ZXTape!'X2C(1A) THEN DO
SAY 'This file is not TZX type'
EXIT
END
SAY 'TZXView (R) View Utility Version 1.0 04-Feb-2022'
SAY ' (c) 2022 Alex Kovrigin, 2:5000/111.47'
SAY TZXFILE 'ZXTape file revision' C2D(READCH(FILE,1))'.'RIGHT(C2D(READCH(FILE,1)),2,0)
SAY
DO FOREVER
ID=C2X(READCH(FILE,1))
SELECT
WHEN ID=10 THEN DO
PAUSE=C2D(REVERSE(READCH(FILE,2)))
LENGTH=C2D(REVERSE(READCH(FILE,2)))
SAY 'ID'ID 'Standard speed data block. Pause after this block' PAUSE 'ms. Length' LENGTH
FLAG=C2D(READCH(FILE,1))
IF FLAG=0&LENGTH=19 THEN DO
TYPE=C2D(READCH(FILE,1))
SELECT
WHEN TYPE=0 THEN TYPE='Program'
WHEN TYPE=1 THEN TYPE='Number Array'
WHEN TYPE=2 THEN TYPE='Character Array'
WHEN TYPE=3 THEN TYPE='Bytes'
OTHERWISE
END
NAME=READCH(FILE,10)
SIZE=C2D(REVERSE(READCH(FILE,2)))
START=C2D(REVERSE(READCH(FILE,2)))
IF TYPE='Program'&START>32767 THEN START=NONE
LENGTH=C2D(REVERSE(READCH(FILE,2)))
IF TYPE='Bytes' THEN LENGTH=''
SAY ' Type Name Length Start Size'
SAY ' 'LEFT(TYPE,15)||RIGHT(NAME,12)||RIGHT(LENGTH,8)||RIGHT(START,7)||RIGHT(SIZE,7)
END
ELSE DO
SAY ' Type Flag Size'
SAY ' -----Headerless--block-----'RIGHT(FLAG,15)||RIGHT(LENGTH-2,7)
ENDLENGTH=SEEK(FILE,LENGTH-2)
END
ENDLENGTH=SEEK(FILE,1)
END
WHEN ID=11 THEN DO
ENDLENGTH=SEEK(FILE,13)
PAUSE=C2D(REVERSE(READCH(FILE,2)))
LENGTH=C2D(REVERSE(READCH(FILE,3)))
SAY 'ID'ID 'Turbo speed data block. Pause after this block' PAUSE 'ms. Length' LENGTH
FLAG=C2D(READCH(FILE,1))
IF FLAG=0&LENGTH=19 THEN DO
TYPE=C2D(READCH(FILE,1))
SELECT
WHEN TYPE=0 THEN TYPE='Program'
WHEN TYPE=1 THEN TYPE='Number Array'
WHEN TYPE=2 THEN TYPE='Character Array'
WHEN TYPE=3 THEN TYPE='Bytes'
OTHERWISE
END
NAME=READCH(FILE,10)
SIZE=C2D(REVERSE(READCH(FILE,2)))
START=C2D(REVERSE(READCH(FILE,2)))
IF TYPE='Program'&START>32767 THEN START=NONE
LENGTH=C2D(REVERSE(READCH(FILE,2)))
IF TYPE='Bytes' THEN LENGTH=''
SAY ' Type Name Length Start Size'
SAY ' 'LEFT(TYPE,15)||RIGHT(NAME,12)||RIGHT(LENGTH,8)||RIGHT(START,7)||RIGHT(SIZE,7)
END
ELSE DO
SAY ' Type Flag Size'
SAY ' -----Headerless--block-----'RIGHT(FLAG,15)||RIGHT(LENGTH-2,7)
ENDLENGTH=SEEK(FILE,LENGTH-2)
END
ENDLENGTH=SEEK(FILE,1)
END
WHEN ID=12 THEN DO
PAUSE=C2D(REVERSE(READCH(FILE,2)))
LENGTH=C2D(REVERSE(READCH(FILE,2)))
SAY 'ID'ID 'Pure tone. Length of pulse' PAUSE 'T-states. Number of pulses' LENGTH
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=13 THEN DO
LENGTH=C2D(READCH(FILE,1))
SAY 'ID'ID 'Pulse sequence. Number of pulses' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH*2)
END
WHEN ID=14 THEN DO
ENDLENGTH=SEEK(FILE,5)
PAUSE=C2D(REVERSE(READCH(FILE,2)))
LENGTH=C2D(REVERSE(READCH(FILE,3)))
SAY 'ID'ID 'Pure data block. Pause after this block' PAUSE 'ms. Length' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH)
END
WHEN ID=15 THEN DO
ENDLENGTH=SEEK(FILE,2)
PAUSE=C2D(REVERSE(READCH(FILE,2)))
ENDLENGTH=SEEK(FILE,1)
LENGTH=C2D(REVERSE(READCH(FILE,3)))
SAY 'ID'ID 'Direct recording. Pause after this block' PAUSE 'ms. Length' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH)
END
WHEN ID=16 THEN DO
LENGTH=C2D(REVERSE(READCH(FILE,4)))
SAY 'ID'ID 'C64 ROM type data block. Block length' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH)
END
WHEN ID=17 THEN DO
LENGTH=C2D(REVERSE(READCH(FILE,4)))
SAY 'ID'ID 'C64 turbo tape data block. Block length' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH)
END
WHEN ID=18 THEN DO
LENGTH=C2D(REVERSE(READCH(FILE,4)))
PAUSE=C2D(REVERSE(READCH(FILE,2)))
SAY 'ID'ID 'CSW recording block. Pause after this block' PAUSE 'ms. Block length' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH-2)
END
WHEN ID=19 THEN DO
LENGTH=C2D(REVERSE(READCH(FILE,4)))
PAUSE=C2D(REVERSE(READCH(FILE,2)))
SAY 'ID'ID 'Generalized data block. Pause after this block' PAUSE 'ms. Block length' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH-2)
END
WHEN ID=20 THEN DO
PAUSE=C2D(REVERSE(READCH(FILE,2)))
IF PAUSE=0 THEN SAY 'ID'ID '''Stop the tape'' command'
ELSE SAY 'ID'ID 'Pause (silence)' PAUSE 'ms.'
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=21 THEN DO
LENGTH=C2D(READCH(FILE,1))
NAME=READCH(FILE,LENGTH)
SAY 'ID'ID 'Group start. Group name:' NAME
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=22 THEN DO
SAY 'ID'ID 'Group end'
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=23 THEN DO
SAY 'ID'ID 'Jump to block'
ENDLENGTH=SEEK(FILE,2)
END
WHEN ID=24 THEN DO
LENGTH=C2D(REVERSE(READCH(FILE,2)))
SAY 'ID'ID 'Loop start. Number of repetitions' LENGTH
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=25 THEN DO
SAY 'ID'ID 'Loop end'
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=26 THEN DO
LENGTH=C2D(REVERSE(READCH(FILE,2)))
SAY 'ID'ID 'Call sequence. Number of calls' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH*2)
END
WHEN ID=27 THEN DO
SAY 'ID'ID 'Return from sequence'
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=28 THEN DO
LENGTH=C2D(REVERSE(READCH(FILE,2)))
PAUSE=READCH(FILE,1)
SAY 'ID'ID 'Select block: 'PAUSE
ENDLENGTH=SEEK(FILE,LENGTH-1)
END
WHEN ID=2A THEN DO
SAY 'ID'ID 'Stop tape if in 48K mode'
ENDLENGTH=SEEK(FILE,4)
END
WHEN ID=2B THEN DO
ENDLENGTH=SEEK(FILE,4)
PAUSE=C2D(READCH(FILE,1))
SELECT
WHEN PAUSE=0 THEN PAUSE='Low'
WHEN PAUSE=1 THEN PAUSE='High'
OTHERWISE
END
SAY 'ID'ID 'Set signal level. Signal level' PAUSE
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=30 THEN DO
LENGTH=C2D(READCH(FILE,1))
PAUSE=READCH(FILE,LENGTH)
SAY 'ID'ID 'Text description. Length' LENGTH
SAY ' 'PAUSE
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=31 THEN DO
PAUSE=C2D(READCH(FILE,1))
LENGTH=C2D(READCH(FILE,1))
CHAR=READCH(FILE,LENGTH)
SAY 'ID'ID 'Message block. Time for which the message should be displayed' PAUSE 's. Length' LENGTH
SAY ' 'CHAR
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=32 THEN DO
LENGTH=C2D(REVERSE(READCH(FILE,2)))
PAUSE=C2D(READCH(FILE,1))
SAY 'ID'ID 'Archive info. Number of text strings' PAUSE'. Length' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH-1)
END
WHEN ID=33 THEN DO
LENGTH=C2D(READCH(FILE,1))
SAY 'ID'ID 'Hardware type'
ENDLENGTH=SEEK(FILE,LENGTH*3)
END
WHEN ID=34 THEN DO
SAY 'ID'ID 'Emulation info'
ENDLENGTH=SEEK(FILE,8)
END
WHEN ID=35 THEN DO
PAUSE=READCH(FILE,16)
LENGTH=C2D(REVERSE(READCH(FILE,4)))
SAY 'ID'ID 'Custom info block. Length of the custom info' LENGTH
SAY ' 'PAUSE
ENDLENGTH=SEEK(FILE,LENGTH)
END
WHEN ID=40 THEN DO
PAUSE=C2D(READCH(FILE,1))
SELECT
WHEN PAUSE=0 THEN PAUSE=Z80
WHEN PAUSE=1 THEN PAUSE=SNA
OTHERWISE
END
LENGTH=C2D(REVERSE(READCH(FILE,3)))
SAY 'ID'ID 'Snapshot block.' PAUSE'. Snapshot length' LENGTH
ENDLENGTH=SEEK(FILE,LENGTH)
END
WHEN ID=5A THEN DO
ENDLENGTH=SEEK(FILE,7)
SAY 'ID'ID 'Glue block. ZXTape file revision' C2D(READCH(FILE,1))'.'C2D(READCH(FILE,1))
ENDLENGTH=SEEK(FILE,0)
END
WHEN ID=00 THEN DO
SAY
SAY 'ID'ID', real length:' ENDLENGTH'. Please cut!'
EXIT
END
OTHERWISE DO
SAY
SAY 'ID'ID', length:' ENDLENGTH
EXIT
END
END
END
[свернуть]
Примеры:
Код:D:\util\regina\regina.exe D:\util\regina\TZXView.rex Cobra Force.tzx
TZXView (R) View Utility Version 1.0 04-Feb-2022
(c) 2022 Alex Kovrigin, 2:5000/111.47
Cobra Force.tzx ZXTape file revision 1.10
ID30 Text description. Length 28
Created with Ramsoft MakeTZX
ID10 Standard speed data block. Pause after this block 967 ms. Length 19
Type Name Length Start Size
Program Cobra 142 0 142
ID10 Standard speed data block. Pause after this block 2853 ms. Length 144
Type Flag Size
-----Headerless--block----- 255 142
ID10 Standard speed data block. Pause after this block 761 ms. Length 19
Type Name Length Start Size
Bytes loader 65024 512
ID10 Standard speed data block. Pause after this block 2930 ms. Length 514
Type Flag Size
-----Headerless--block----- 255 512
ID11 Turbo speed data block. Pause after this block 1 ms. Length 6914
Type Flag Size
-----Headerless--block----- 0 6912
ID11 Turbo speed data block. Pause after this block 760 ms. Length 40002
Type Flag Size
-----Headerless--block----- 0 40000
ID11 Turbo speed data block. Pause after this block 16079 ms. Length 6914
Type Flag Size
-----Headerless--block----- 0 6912
ID, length: 54643
Код:D:\util\regina\regina.exe D:\util\regina\TZXView.rex Beach Head.tzx
TZXView (R) View Utility Version 1.0 04-Feb-2022
(c) 2022 Alex Kovrigin, 2:5000/111.47
Beach Head.tzx ZXTape file revision 1.20
ID32 Archive info. Number of text strings 2. Length 21
ID10 Standard speed data block. Pause after this block 984 ms. Length 19
Type Name Length Start Size
Program BEACH HEAD 795 0 847
ID10 Standard speed data block. Pause after this block 6094 ms. Length 849
Type Flag Size
-----Headerless--block----- 255 847
ID19 Generalized data block. Pause after this block 1971 ms. Block length 268
ID19 Generalized data block. Pause after this block 1952 ms. Block length 7160
ID19 Generalized data block. Pause after this block 310 ms. Block length 26369
ID19 Generalized data block. Pause after this block 0 ms. Block length 14408
ID, length: 49137