Добавлены разделы по передаче параметров в функции на ассемблере и возврату значений в С.
Добавлен глоссарий по утилитам и прочему.
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
Последний раз редактировалось creator; 22.03.2022 в 07:54.
В правильно заданном вопросе содержится половина ответа
Sergey (15.09.2022)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)