Micro-Professor MPF-II Assembler

MOS Technology / Commodore / Apple II / NES etc.

Moderator: Lavr

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Micro-Professor MPF-II Assembler

Post by Lavr »

vitali wrote:Я не совсем понял, STROBE будет постоянно молотить clock?
Нет... только когда MPF-II принимает массив байт.
vitali wrote:А как посмотреть экзешник из архива?
Вынуть из архива и запустить его...
На Win-64 работать не будет, поскольку у меня 32-разрядная Windows-7, она запускает 16-разрядное приложение.

Но можно попробовать 32-разрядную сборку:
манчестер.PNG
MANCHES1.zip
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

У меня древний планшет на Атоме, доросший от Винды 8.0 до последней сборки десятки, 32-битная. Последний экзешник запустился.

Классная анимация. В чем такое делается?
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Micro-Professor MPF-II Assembler

Post by Lavr »

vitali wrote:Классная анимация. В чем такое делается?
Написано на очень древнем софте и скомпилировано весьма современным компилятором. :wink:

Собственно, если б у вас был древний ноут с Виндой 98 ... ХР и портом LPT, половина дела
была бы уже сделана, поскольку в этой программе написаны и клиент и сервер...
А так - клиент я сейчас переношу на Applesoft BASIC, ну а сервер вам придётся написать
на Piton, или что там у вас на повод дёргания лапками имеется.
iLavr
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

Lavr wrote:
vitali wrote:Классная анимация. В чем такое делается?
Написано на очень древнем софте и скомпилировано весьма современным компилятором. :wink:
Понятно. Впечатляет!
Lavr wrote: Собственно, если б у вас был древний ноут с Виндой 98 ... ХР и портом LPT, половина дела
была бы уже сделана, поскольку в этой программе написаны и клиент и сервер...
А так - клиент я сейчас переношу на Applesoft BASIC, ну а сервер вам придётся написать
на Piton, или что там у вас на повод дёргания лапками имеется.
Древнего ноута, к сожалению, нет. Но есть гипотетический шанс заполучить его, спрошу.
А что, если лапками дрыгать из Ардуины? Конструктивно это можно было бы оформить как маленький блочок рядом с MPF-II, с SD-картой и маленьким OLED экранчиком для пролистывания софта для загрузки.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Micro-Professor MPF-II Assembler

Post by Lavr »

vitali wrote:Древнего ноута, к сожалению, нет. Но есть гипотетический шанс заполучить его, спрошу.
Я думаю - уже не надо дёргаться на этот повод - я уже учёл, что у нас его нет.
vitali wrote:А что, если лапками дрыгать из Ардуины? Конструктивно это можно было бы оформить как маленький блочок рядом с MPF-II, с SD-картой и маленьким OLED экранчиком для пролистывания софта для загрузки.
Ну это ваше дело - чем вы будете лапками дрыгать со стороны РС.
Я допишу сейчас клиент для MPF-II на Applesoft BASIC и напишу вам алгоритм на русском языке.
А там - решайте сами.
iLavr
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

Да, глупо еще один ноутбук держать рядом с основным ноутбуком для загрузки MPF-II.
Поэтому ногодрыг будет другой. Мне кажется, Ардуина логично ложится в концепцию - просто, 5-вольт совместимо и реалтайменно, в отличие от линукса "Малины".

Нашел свой старый логгер на SD-карточке с часами реального времени и экранчиком - добавлю 3 кнопки интерфейса, и получится MPF-II Binary Data Loader:
You do not have the required permissions to view the files attached to this post.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Micro-Professor MPF-II Assembler

Post by Lavr »

Ну что ж... пора приступить к отладке клиента для MPF-II на реальном железе?
А то у меня лишь эти эмуляторы, которые меня уже зело подутомили без аппаратной поддержки,
а у вас хотя бы кнопка Busy работающая есть - воспользуется ей! :wink:

Ниже - альфа-версия софта. Собственно, частично заглушенная аппаратно для эмулятора,
но в эмуляции практически всё на первый взгляд безошибочно работает...

 MPF-II BASIC LOADER V1

Code: Select all

10  REM >>>>>>>> RECEIVING CODE BLOCK FROM PC <<<<<
20  TEXT : HOME : ON ERROR GOTO 590 : REM ERRORHAND
30  PRINT ">>>>> RECEIVING CODE BLOCK FROM PC <<<<<"
35  PRINT "STROBE=<0> " : PRINT
40  S0 = PEEK($C010) : REM SET STROBE="0" - C058
50  PRINT ">>>>> PRESS [ENTER] TO START: ";
60  GET KEY$ : IF KEY$ <> CHR$(13) THEN GOTO 60
70  PRINT : PRINT : PRINT "WAITING BUSY=<1> ..." : J = 1
80  GOSUB 1900 : REM GET BIT 6 THERE
85  PRINT B(6); : J = J + 1
90  IF J = 78 THEN NORMAL: HTAB 1: J = 1: GOTO 95
93  IF J = 39 THEN INVERSE: HTAB 1
95  IF B(6) = 0 THEN GOTO 80
100 NORMAL: PRINT : PRINT : PRINT "START LOADING... SET STROBE = 1-0-1-0...  "
110 ADDR = INT(1 - 1) : LNGTH = INT(1 - 1) : REM MAKE THEM INTEGER
120 BYTE = INT(1 - 1) : PRE = INT(2 - 1) : NUM = INT(1 - 1)
130 GOSUB 660 : REM GETBYTE
140 IF NUM > 2 THEN GOTO 520 : REM ERROR GETBYTE
150 ADDR = BYTE * 256
160 C$ = "0123456789ABCDEF"
170 AH = INT(BYTE/16) : AL = BYTE - (AH * 16)
180 A1$ = MID$(C$, AH + 1, 1) : A1$ = A1$  + MID$(C$, AL + 1, 1)
190 GOSUB 660 : REM GETBYTE
200 IF NUM > 2 THEN GOTO 520 : REM ERROR GETBYTE
210 ADDR = ADDR + BYTE
220 AH = INT(BYTE/16) : AL = BYTE - (AH * 16)
230 A0$ = MID$(C$, AH + 1, 1) : A0$ = A0$  + MID$(C$, AL + 1, 1)
240 A1$ = A1$ + A0$ + "H; "
250 PRINT : PRINT "START  ADDR  = "; A1$; ADDR
260 GOSUB 660 : REM GETBYTE
270 IF NUM > 2 THEN GOTO 520 : REM ERROR GETBYTE
280 LNGTH = BYTE * 256
290 AH = INT(BYTE/16) : AL = BYTE - (AH * 16)
300 A1$ = MID$(C$, AH + 1, 1) : A1$ = A1$  + MID$(C$, AL + 1, 1)
310 GOSUB 660 : REM GETBYTE
320 IF NUM > 2 THEN GOTO 520 : REM ERROR 660 : REM GETBYTE
330 LNGTH = LNGTH + BYTE
340 AH = INT(BYTE/16) : AL = BYTE - (AH * 16)
350 A0$ = MID$(C$, AH + 1, 1) : A0$ = A0$  + MID$(C$, AL + 1, 1)
360 A1$ = A1$ + A0$ + "H; "
370 PRINT : PRINT "BLOCK LENGTH = "; A1$; LNGTH; " Bytes "
380 PRINT : PRINT "LOADING BLOCK FROM ADDR "; ADDR; "... "
390 GOSUB 660 : REM GETBYTE
400 IF NUM > 2 THEN GOTO 520 : REM ERROR GETBYTE
410 POKE ADDR, BYTE
420 ADDR = ADDR + 1 : LNGTH = LNGTH - 1
430 IF LNGTH > 0 THEN GOTO 390
440 PRINT
445 PRINT "THE WHOLE CODE BLOCK IS LOADED!"
450 PRINT "PRESS [ENTER] TO START OR [ESC] - EXIT:";
460 GET KEY$
470 IF KEY$ = CHR$(27) THEN GOTO 600 : REM EXITALL
480 IF KEY$ <> CHR$(13) THEN GOTO 460
490 CALL ADDR
500 GOTO 600 : REM EXITALL
520 PRINT
530 PRINT "ERROR WHILE LOADING CURRENT BYTE!" : REM ERROREND
540 PRINT "PRESS [ENTER] TO RESTART, [ESC]> EXIT:";
550 GET KEY$
560 IF KEY$ = CHR$(27) THEN GOTO 600 : REM EXITALL
570 IF KEY$ = CHR$(13) THEN GOTO 20
580 GOTO 550
590 PRINT : PRINT "INERNAL BASIC ERROR! PROGRAM ABORTED! " : REM ERRORHAND
600 END : REM EXITALL

660 BYTE = 0 : W = 256 : BN = 8 : REM GETBYTE
670 GOSUB 750
680 IF NUM > 2 THEN GOTO 720 : REM EXIT GETBYTE
690 W =  W / 2 : BYTE = BYTE + (W * BIT)
700 BN = BN - 1
710 IF BN <> 0 THEN GOTO 670
720 RETURN

750 NUM = 0 : LC = 0 : REM GETBIT
755 HTAB 1 : NORMAL
760 FOR K = 1 TO 39
763 PRINT "+";
764 NEXT K
765 HTAB 1
768 S1 = PEEK($C010) : REM SET STROBE="1" - C059
770 GOSUB 1900 : REM GET BIT 6 THERE
780 PRINT B(6); : LC = LC + 1
790 IF B(6) <> PRE THEN NUM = NUM + 1 : GOTO 810
800 IF LC < 11 THEN GOTO 770
810 IF B(6) < PRE THEN BIT = 1
820 IF B(6) > PRE THEN BIT = 0
825 PRE = B(6)
830 S0 = PEEK($C010) : REM SET STROBE="0" - C058
840 HTAB 10 : INVERSE
850 FOR K = 10 TO 20
860 PRINT B(6); 
870 NEXT K
880 HTAB 20 : NORMAL : LC = 20
890 S1 = PEEK($C010) : REM SET STROBE="1" - C059
900 GOSUB 1900 : REM GET BIT 6 THERE
910 PRINT B(6); : LC = LC + 1
915 IF B(6) <> PRE THEN NUM = NUM + 1 : GOTO 925
920 IF LC < 31 THEN GOTO 900
925 IF B(6) < PRE THEN BIT = 1
930 IF B(6) > PRE THEN BIT = 0
940 PRE = B(6)
950 S0 = PEEK($C010) : REM SET STROBE="0" - C058
960 HTAB 31 : INVERSE
970 FOR K = 31 TO 39
975 PRINT B(6); 
980 NEXT K
985 HTAB 1 : NORMAL
990 IF NUM = 0 THEN NUM = 15
995 RETURN

1900 GET KEY$ : BX = PEEK($C010): N = 256 : REM TEST BIT6
1910 FOR I = 7 TO 5 STEP -1
1920 N = N/2
1930 B(I) = INT(BX/N): BX = BX - (B(I)*N)
1940 NEXT I
1950 B(6) = B(5) : REM FOR DEBUG
1960 RETURN

Для отладки используется подмена Бита 6 - Busy Битом 5, на который влияет клавиатура:

Code: Select all

[Пробел] - устанавливает бит 5 
клавиши: '[', ']', '\' - сбрасывают бит 5 в любом регистре - проверено на эмуляторе!
Формат передачи блока кодов следующий:
Первые два байта: адрес загрузки блока - Старший байт, Младший байт.
Вторые два байта: длина блока кодов - Старший байт, Младший байт.
Далее подряд идёт блок кодов указанной длины.
Каждый байт передаётся начиная от старшего бита (бит 7) к младшему биту (бит 0).
Формат передачи - манчестерское кодирование, подробно изображено на картинках здесь в топике.

Чтобы от тестирования с клавиатуры перейти к тестированию аппаратно кнопкой Busy,
необходимо исправить следующий участок кода:

Code: Select all

1900 BX = PEEK($C010): N = 256 : REM TEST BIT6
1910 FOR I = 7 TO 5 STEP -1
1920 N = N/2
1930 B(I) = INT(BX/N): BX = BX - (B(I)*N)
1940 NEXT I
1960 RETURN
P.S. Имитировал я биты с клавиатуры, глядя на следующую картинку:
манчестер2.png
Ни одного перехода за 2 такта STROBE = 1 такт CLOCK - ОШИБКА!
Более двух переходов за 2 такта STROBE = 1 такт CLOCK - ОШИБКА!
Переход "0"->"1" = лог."0", переход "1"->"0" = лог."1".
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

Ого, вот это софт! :) Расчехляю Audacity на лаптопе, буду набирать Васик и записывать промежуточные версии
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

Code: Select all

S0 = PEEK($C010)
Такое в AppleBasic работает? Профессор ругается:
You do not have the required permissions to view the files attached to this post.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Micro-Professor MPF-II Assembler

Post by Lavr »

vitali wrote:

Code: Select all

S0 = PEEK($C010)
Такое в AppleBasic работает? Профессор ругается:
В Applesoft BASIC это работает, но я же с самого начала показывал возможные варианты:

Code: Select all

BX = PEEK(49168) : REM BX = PEEK(-16368) или BX = PEEK($C010) 
Заменяйте сами на работающий у Профессора вариант, у меня ведь его нет.
Lavr wrote:Я допишу сейчас клиент для MPF-II на Applesoft BASIC и напишу вам алгоритм на русском языке.
Ниже код клиента для MPF-II, из которого все отладочные условности вычищены:

 MPF-II BASIC LOADER V1.1

Code: Select all

10  REM >>>>>>>> RECEIVING CODE BLOCK FROM PC <<<<<
20  TEXT : HOME : ON ERROR GOTO 590 : REM ERRORHAND
30  PRINT ">>>>> RECEIVING CODE BLOCK FROM PC <<<<<"
35  PRINT "STROBE=<0> " : PRINT
40  S0 = PEEK($C058) : REM SET STROBE="0" - C058
50  PRINT ">>>>> PRESS [ENTER] TO START: ";
60  GET KEY$ : IF KEY$ <> CHR$(13) THEN GOTO 60
70  PRINT : PRINT : PRINT "WAITING BUSY=<1> ..." : J = 1
80  GOSUB 1900 : REM GET BIT 6 THERE
85  PRINT B(6); : J = J + 1
90  IF J = 78 THEN NORMAL: HTAB 1: J = 1: GOTO 95
93  IF J = 39 THEN INVERSE: HTAB 1
95  IF B(6) = 0 THEN GOTO 80
100 NORMAL: PRINT : PRINT : PRINT "START LOADING... SET STROBE = 1-0-1-0...  "
110 ADDR = INT(1 - 1) : LNGTH = INT(1 - 1) : REM MAKE THEM INTEGER
120 BYTE = INT(1 - 1) : PRE = INT(2 - 1) : NUM = INT(1 - 1)
130 GOSUB 660 : REM GETBYTE
140 IF NUM > 2 THEN GOTO 520 : REM ERROR GETBYTE
150 ADDR = BYTE * 256
160 C$ = "0123456789ABCDEF"
170 AH = INT(BYTE/16) : AL = BYTE - (AH * 16)
180 A1$ = MID$(C$, AH + 1, 1) : A1$ = A1$  + MID$(C$, AL + 1, 1)
190 GOSUB 660 : REM GETBYTE
200 IF NUM > 2 THEN GOTO 520 : REM ERROR GETBYTE
210 ADDR = ADDR + BYTE
220 AH = INT(BYTE/16) : AL = BYTE - (AH * 16)
230 A0$ = MID$(C$, AH + 1, 1) : A0$ = A0$  + MID$(C$, AL + 1, 1)
240 A1$ = A1$ + A0$ + "H; "
250 PRINT : PRINT "START  ADDR  = "; A1$; ADDR
260 GOSUB 660 : REM GETBYTE
270 IF NUM > 2 THEN GOTO 520 : REM ERROR GETBYTE
280 LNGTH = BYTE * 256
290 AH = INT(BYTE/16) : AL = BYTE - (AH * 16)
300 A1$ = MID$(C$, AH + 1, 1) : A1$ = A1$  + MID$(C$, AL + 1, 1)
310 GOSUB 660 : REM GETBYTE
320 IF NUM > 2 THEN GOTO 520 : REM ERROR 660 : REM GETBYTE
330 LNGTH = LNGTH + BYTE
340 AH = INT(BYTE/16) : AL = BYTE - (AH * 16)
350 A0$ = MID$(C$, AH + 1, 1) : A0$ = A0$  + MID$(C$, AL + 1, 1)
360 A1$ = A1$ + A0$ + "H; "
370 PRINT : PRINT "BLOCK LENGTH = "; A1$; LNGTH; " Bytes "
380 PRINT : PRINT "LOADING BLOCK FROM ADDR "; ADDR; "... "
390 GOSUB 660 : REM GETBYTE
400 IF NUM > 2 THEN GOTO 520 : REM ERROR GETBYTE
410 POKE ADDR, BYTE
420 ADDR = ADDR + 1 : LNGTH = LNGTH - 1
430 IF LNGTH > 0 THEN GOTO 390
440 PRINT
445 PRINT "THE WHOLE CODE BLOCK IS LOADED!"
450 PRINT "PRESS [ENTER] TO START OR [ESC] - EXIT:";
460 GET KEY$
470 IF KEY$ = CHR$(27) THEN GOTO 600 : REM EXITALL
480 IF KEY$ <> CHR$(13) THEN GOTO 460
490 CALL ADDR
500 GOTO 600 : REM EXITALL
520 PRINT
530 PRINT "ERROR WHILE LOADING CURRENT BYTE!" : REM ERROREND
540 PRINT "PRESS [ENTER] TO RESTART, [ESC]> EXIT:";
550 GET KEY$
560 IF KEY$ = CHR$(27) THEN GOTO 600 : REM EXITALL
570 IF KEY$ = CHR$(13) THEN GOTO 20
580 GOTO 550
590 PRINT : PRINT "INERNAL BASIC ERROR! PROGRAM ABORTED! " : REM ERRORHAND
600 END : REM EXITALL

660 BYTE = 0 : W = 256 : BN = 8 : REM GETBYTE
670 GOSUB 750
680 IF NUM > 2 THEN GOTO 720 : REM EXIT GETBYTE
690 W =  W / 2 : BYTE = BYTE + (W * BIT)
700 BN = BN - 1
710 IF BN <> 0 THEN GOTO 670
720 RETURN

750 NUM = 0 : LC = 0 : REM GETBIT
755 HTAB 1 : NORMAL
760 FOR K = 1 TO 39
763 PRINT "+";
764 NEXT K
765 HTAB 1
768 S1 = PEEK($C059) : REM SET STROBE="1" - C059
770 GOSUB 1900 : REM GET BIT 6 THERE
780 PRINT B(6); : LC = LC + 1
790 IF B(6) <> PRE THEN NUM = NUM + 1 : GOTO 810
800 IF LC < 11 THEN GOTO 770
810 IF B(6) < PRE THEN BIT = 1
820 IF B(6) > PRE THEN BIT = 0
825 PRE = B(6)
830 S0 = PEEK($C058) : REM SET STROBE="0" - C058
840 HTAB 10 : INVERSE
850 FOR K = 10 TO 20
860 PRINT B(6);
870 NEXT K
880 HTAB 20 : NORMAL : LC = 20
890 S1 = PEEK($C059) : REM SET STROBE="1" - C059
900 GOSUB 1900 : REM GET BIT 6 THERE
910 PRINT B(6); : LC = LC + 1
915 IF B(6) <> PRE THEN NUM = NUM + 1 : GOTO 925
920 IF LC < 31 THEN GOTO 900
925 IF B(6) < PRE THEN BIT = 1
930 IF B(6) > PRE THEN BIT = 0
940 PRE = B(6)
950 S0 = PEEK($C058) : REM SET STROBE="0" - C058
960 HTAB 31 : INVERSE
970 FOR K = 31 TO 39
975 PRINT B(6);
980 NEXT K
985 HTAB 1 : NORMAL
990 IF NUM = 0 THEN NUM = 15
995 RETURN

1900 BX = PEEK($C010): N = 256 : REM TEST BIT6
1910 FOR I = 7 TO 6 STEP -1
1920 N = N/2
1930 B(I) = INT(BX/N): BX = BX - (B(I)*N)
1940 NEXT I
1950 RETURN

Если попадаются нерабочие строки типа PEEK($C010) и аналогичные - заменяйте HEX $C010
на DEC через калькулятор Windows.
-16368 - это двухбайтное значение, 49168 - четырёхбайтное значение, оно же: 65536-16368.

Ниже в архиве - алгоритм обмена на русском языке, чтобы вы смогли написать свой сервер.
Алгоритм обмена.zip
Желаю удачи! :kruto:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

Спасибо за подробнейшее описание алгоритма обмена и код на Бейсике!
Поскольку проект нарисовывается серьезный, я открыл репозиторий на Гитлабе, сильно проще будет разбираться в изменениях.

Вот разница между версиями 1.0 и 1.1
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Micro-Professor MPF-II Assembler

Post by Lavr »

vitali wrote:Вот разница между версиями 1.0 и 1.1
Чисто, чтобы было понятно, в чем разница между отладочной и оригинальной версиями:
некоторые нужные нам адреса эмулятор Applesoft BASIC использовать просто не позволял:
C058.PNG
Хотя в их эмуляции и не было никакой пользы для отладки... :-?
Поэтому все они были для прохождения отладки записаны как $C010.
В оригинальной версии - все адреса правильные, но её не выполнит эмулятор.

При отладке, чтобы имитировать сигнал BUSY от PC, я делал подмену Бита 6 на Бит 5 - им
можно управлять с клавиатуры. Программа при этом тормозилась по оператору GET.

Code: Select all

1900 GET KEY$ : BX = PEEK($C010): N = 256 : REM TEST BIT6
1910 FOR I = 7 TO 5 STEP -1
1920 N = N/2
1930 B(I) = INT(BX/N): BX = BX - (B(I)*N)
1940 NEXT I
1950 B(6) = B(5) : REM FOR DEBUG
1960 RETURN
В оригинальном коде проверяется только Бит 6 - BUSY.

Code: Select all

1900 BX = PEEK($C010): N = 256 : REM TEST BIT6
1910 FOR I = 7 TO 6 STEP -1
1920 N = N/2
1930 B(I) = INT(BX/N): BX = BX - (B(I)*N)
1940 NEXT I
1950 RETURN
В этом, собственно, и вся разница между этими двумя версиями...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

Понятно.
В общем, я взял за основу Ваш последний код (1.1), заменил шестнадцатеричные числа в PEEK() на десятичные,
и выложил в ГИТ как версию 1.2, буду ее набивать в MPF.
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

Примерно половину программы набил (спасением является работающий после переделки выхода MIC ZX-Магнитофон). Глядя на ужас экрана MPF-II с листингом программы, подумалось: а можно сделать абсолютно минимальный вариант Бейсик Загрузчика, который, скажем, грузиит два байта с ардуино? И отладить только его, все что можно, разместив в подпрограммах, вылизав до упора.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Micro-Professor MPF-II Assembler

Post by Lavr »

Я не знаю реальной скорости вашего Micro-Professor MPF-II, поэтому вставки на ассемблере
мне написать удалённо - очень затруднительно.

P.S. В принципе есть и другой вариант, я посмотрел, у Apple-][ интерфейс RS-232 реализован
аппаратно на отдельной плате. Если существует плата расширения RS-232 под системный
разъём Micro-Professor MPF-II, можно купить и использовать её.
iLavr