Я пользуюсь "CP/M V2.2 для пользователей и программистов" NedoPC 2004.По работе с экраном и клавиатурой лично мне всё понятно,а вот по работе с диском хотелось бы поболее и поподробней.Shaos wrote:Я так думаю, что пришла пора кому-то из ATM-щиков написать статью для NedoPC-издания о программировании Турбо-2+, о том как читаются и пишутся файлы, элементарные операции с экраном и т.д.
[ATM] Програмирование на Turbo2+
Moderator: Shaos
-
- Writer
- Posts: 15
- Joined: 07 Jul 2005 22:58
- Location: Новосибирск
-
- Writer
- Posts: 15
- Joined: 07 Jul 2005 22:58
- Location: Новосибирск
-
- Fanat
- Posts: 88
- Joined: 21 Nov 2002 11:09
- Location: E-burg/Russia
Через точку вызова BDOS или через BIOS, если хочешь, что бы программа работала при любых их изменениях.Yarik wrote:Как будет корректней выводить символ на экран?
Через BIOS или напрямую F809h монитора.
Через BIOS конечно работает быстрее.
Но рекомендуется вызовы делать с учетом адреса теплого старта,
который расположен в ячейках 0001h, 0002h.
При этом обычно, либо пишется процедура вызова требуемой
функции BIOS по ее смещению относительно адреса теплого старта,
либо при запуске программы производится настройка точек вызова
функций BIOS.
Второй вариант мне кажется предпочтительным поскольку обеспечивает
наибольшее быстродействие.
Можно конечно выводить и через монитор, но в этом случае
программа будет работать только на ATM.
-
- Senior
- Posts: 126
- Joined: 08 Jun 2002 19:00
- Location: Москва
Сформулируй вопрос почетче. А пока в общих чертах - открываешь файл соответствующей функцией. А затем функцией последовательного чтения (про более сложный произвольный доступ ведь речь пока не идет? Только про банальное считывание файла?) читаешь поблочно (один логический блок - 128 байт) - за один вызов функции считывается в 128-байтный буфер (расположенный, если не переставить его силами системы - по адресу #0080) один блок. Далее ты его содержимое уже силами своей программы перебрасывай (LDIRом или еще чем) в место постоянной дислокации. Ну и зацикли считывание блоков либо пока тебе самому не надоест считывать (например, тебе надо считать только часть файла с начала), либо пока не прийдет сообщение "End of file". Каждый следующий блок, естественно, перекидывай на место после предыдущего. Например, планируешь подгрузить файл с адреса #6000. Тогда первый блок из буфера проLDIRишь в #6000, следующий уже в #6080, третий - в #6100 и так далее до нужного тебе завершения цикла.Yarik wrote:Я пользуюсь "CP/M V2.2 для пользователей и программистов" NedoPC 2004.По работе с экраном и клавиатурой лично мне всё понятно,а вот по работе с диском хотелось бы поболее и поподробней.
Кстати, а что ты писать задумал? Или пока просто так тренируешься?
P.S. Номера указанных функций не привожу, так как пишу экспромтом, не имея перед глазами доки... Думаю, сам отыщещь соответствующие данному тексту...
Максагор
-
- Senior
- Posts: 126
- Joined: 08 Jun 2002 19:00
- Location: Москва
Если есть хоть малейшая возможность писать через BIOS, пиши через BIOS - прога универсальнее будет. Так как Рестарты BIOSа стандартные для CP/M 2.2 для любого компа, а вот керналь #F8xx - чисто ATMовская фича. Тут Камиль, кнечно, правильно говорит - через керналь, ессно, чуть быстрее. Но если тебе действительно большая скорость вывода нужна, тот тут тебе никакие средства CP/M не помогут - уж слишком она тормоз. Что через рестарты BIOSа, что через керналь. Тут помогает только прямое обращение к экрану. Так, к примеру, когад я писал SIMPLE PLAYER, то заставку (полоски с менюшками) выводил через BIOS (предварительно временно погасив палитру, кстати, через BIOS, чтобы не был видет тормозной процесс ее рисования), а вот бегущую строку и AYшные уровни громкости каналов - уже прямо кидая байты в экран. Иначе я не то что в прерывание, в десять прерываний не уложился бы, наверное...Yarik wrote:Как будет корректней выводить символ на экран?Через BIOS илиМаксагор wrote: Будешь программить под CP/M, могу помочь. С этой системой я хорошо разобрался.
напрямую F809h монитора.
Максагор
-
- Senior
- Posts: 126
- Joined: 08 Jun 2002 19:00
- Location: Москва
Если и возьмусь, то не раньше, чем через полгода. Диссер все силы отнимает. Даже заниматься любимым делом - ругаться на форуме в теме про ЭсЭсЭсЭРу сил и времени не осталось...CHRV wrote:Ну про экраны есть документация. А вот Макс мог бы напрячся написать про основные принципы програмирования под СПМ. Поддерживаю! В частности обзорчик тулзов...Shaos wrote:Я так думаю, что пришла пора кому-то из ATM-щиков написать статью для NedoPC-издания о программировании Турбо-2+, о том как читаются и пишутся файлы, элементарные операции с экраном и т.д.

Но обещаю, что TASiS все-таки выпущу в самое ближайшее время (счет пошел на дни). А после него - "лягу на дно" на некоторое время.
Максагор
-
- Writer
- Posts: 15
- Joined: 07 Jul 2005 22:58
- Location: Новосибирск
Ну мне это и надо.Просто считать и записать файл.Максагор wrote: Сформулируй вопрос почетче. А пока в общих чертах - открываешь файл соответствующей функцией. А затем функцией последовательного чтения (про более сложный произвольный доступ ведь речь пока не идет? Только про банальное считывание файла?) читаешь поблочно (один логический блок - 128 байт) - за один вызов функции считывается в 128-байтный буфер (расположенный, если не переставить его силами системы - по адресу #0080) один блок. Далее ты его содержимое уже силами своей программы перебрасывай (LDIRом или еще чем) в место постоянной дислокации. Ну и зацикли считывание блоков либо пока тебе самому не надоест считывать (например, тебе надо считать только часть файла с начала), либо пока не прийдет сообщение "End of file". Каждый следующий блок, естественно, перекидывай на место после предыдущего. Например, планируешь подгрузить файл с адреса #6000. Тогда первый блок из буфера проLDIRишь в #6000, следующий уже в #6080, третий - в #6100 и так далее до нужного тебе завершения цикла.
см. мой пост выше.Ну и тренируюсь,как же без этого.Кстати, а что ты писать задумал? Или пока просто так тренируешься?
ЖдёмНо обещаю, что TASiS все-таки выпущу в самое ближайшее время (счет пошел на дни)
-
- Writer
- Posts: 15
- Joined: 07 Jul 2005 22:58
- Location: Новосибирск
-
- Fanat
- Posts: 88
- Joined: 21 Nov 2002 11:09
- Location: E-burg/Russia
Можно.Yarik wrote:Можно как нибудь обмануть линковщик:
надо чтобы часть программы была под адрес #100 а другая часть под другой адрес,но в СОМ файле распологалась сразу за первой частью?
Для этого в M80 есть две опции .phase и .dephase
Например можно написать так:
Code: Select all
.z80
adr2 equ 8000h
;
cseg
;
start: ld hl,adr1
ld de,adr2
ld bc,adr3-adr2
ldir
jp adr2
adr1:
.phase adr2
cikl: ld a,01h
out (0feh),a
ld a,07h
out (0feh),a
jr cikl
adr3:
.dephase
end
-
- Writer
- Posts: 15
- Joined: 07 Jul 2005 22:58
- Location: Новосибирск
Вот.Первый блин
http://www.yrslv.newmail.ru/xdump.zip
http://www.yrslv.newmail.ru/xdump.zip
-
- Fanat
- Posts: 88
- Joined: 21 Nov 2002 11:09
- Location: E-burg/Russia
Посмотрел. Для начала не плохо. Не посчитай, что критикую просто рекомендации:Yarik wrote:Вот.Первый блин
http://www.yrslv.newmail.ru/xdump.zip
1) Я уже говорил прямое обращение к функциям BIOS не рекомендуется.
В данном примере правильней было бы при формировании вызова
CONOUT (ADR_BIOS+0Ch) при установке RST8, взять старший байт из ячейки 0002h.
А для вызова CONIN (ADR_BIOS+09h) старшие байты адресов также
модифицировать значением из ячейки 0002h.
Либо под CONIN настроить RST10;
2) Выход из программы в CP/M-80 обычно выполняется по Ctrl/С;
3) Листание в данном случае лучше сделать нажатием одной клавиши (без Ctrl).
Например как на Спектруме Q-вверх, A-вниз;
4) Обьем ZIP файла оказался очень большим, поскольку в исходном TRD файле
сохранились все программы, которые были на этом диске, несмотря на
то что они были в CP/M удалены.
Наверное лучше иметь образ пустого диска, на который перед
выкладыванием копироовать нужные файлы.
А так отлично, так держать.
Я всегда считал, что по сравнению с TR-DOS CP/M-80 проф-система.
Надеюсь ты оценил это.
-
- Senior
- Posts: 126
- Joined: 08 Jun 2002 19:00
- Location: Москва
-
- Retired
- Posts: 1474
- Joined: 03 Aug 2003 22:37
- Location: Moscow
Не вызывает сомнений. Наверное не стоит сравнивать разные вещи. TR-DOS это минимальный набор функций для работы с диском. Во время выхода Дисковых интерефейсов вроде Beta и Delta, даже такой набор предоставлялся не всеми.Caro wrote:Я всегда считал, что по сравнению с TR-DOS CP/M-80 проф-система.
Extreme Entertainment
-
- Writer
- Posts: 15
- Joined: 07 Jul 2005 22:58
- Location: Новосибирск
УчтемCaro wrote:Посмотрел. Для начала не плохо. Не посчитай, что критикую просто рекомендации:Yarik wrote:Вот.Первый блин
http://www.yrslv.newmail.ru/xdump.zip
1) Я уже говорил прямое обращение к функциям BIOS не рекомендуется.
В данном примере правильней было бы при формировании вызова
CONOUT (ADR_BIOS+0Ch) при установке RST8, взять старший байт из ячейки 0002h.
А для вызова CONIN (ADR_BIOS+09h) старшие байты адресов также
модифицировать значением из ячейки 0002h.
Либо под CONIN настроить RST10
2) Выход из программы в CP/M-80 обычно выполняется по Ctrl/С;
А я так понял что это стандартные (принятые в СПМ) PageUp PageDown3) Листание в данном случае лучше сделать нажатием одной клавиши (без Ctrl).
Например как на Спектруме Q-вверх, A-вниз;
Я заметил,но переделать поленился.4) Обьем ZIP файла оказался очень большим, поскольку в исходном TRD файле
сохранились все программы, которые были на этом диске, несмотря на
то что они были в CP/M удалены.
Наверное лучше иметь образ пустого диска, на который перед
выкладыванием копироовать нужные файлы.
Да.Мне система понравилась,легко осваивается.Если бы ещё каталогиА так отлично, так держать.
Я всегда считал, что по сравнению с TR-DOS CP/M-80 проф-система.
Надеюсь ты оценил это.
поддерживала.
-
- Fanat
- Posts: 88
- Joined: 21 Nov 2002 11:09
- Location: E-burg/Russia
Если бы был задействован режим редактирования, имело бы смысл использовать стандартные сочетания Ctrl+.Yarik wrote: А я так понял что это стандартные (принятые в СПМ) PageUp PageDown
А так удобней листать одной клавишей.
Как вариант можно задействовать USER-области (до 32).Yarik wrote:Мне система понравилась, легко осваивается.
Если бы ещё каталоги поддерживала.