Micro-Professor MPF-II Assembler

MOS Technology / Commodore / Apple II / NES etc.

Moderator: Lavr

User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: 6502 Assembler in BASIC

Post by vitali »

Lavr wrote:А попробуйте всё же - как звук из-под ассемблерной программы?

Code: Select all

10  REM ASSM PROGRAM
15  TEXT : HOME : PRINT " SOUND TEST: "
20  FOR LOC = 768 TO 786
30  READ BYTE
40  POKE LOC,BYTE
50  NEXT LOC
60  DATA 162,0,32,30,251,141,48,192,162,1,32,30,251,141,48,192,76,0,3
70  CALL 768 : REM ORG $300
Нет звука вообще
You do not have the required permissions to view the files attached to this post.
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: 6502 Assembler in BASIC

Post by vitali »

Lavr wrote:
vitali wrote:А со Стробом в мануале не опечатка, случаем? Запись в 58 помечена как LOW
А светодиод у вас точно - на землю? Чтобы уж быть уверенным на 100% - а то что-то
многовато опечаток в мануале... :-?
Да, когда я подавал +5 вольт проводом на STROBE, то светодиод горел.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

Lavr wrote:
vitali wrote:Я записал звук с динамика, файл тут. Не очень высокая частота.
Даааа... :-? частота под Васиком очень мала... придется "hands shake" написать... :-?
Васик очень... очень медленный... что, собственно, и ожидалось...
osc.PNG
Хотя была маленькая надежда, что он чуть побыстрее - но нет... :-?
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: 6502 Assembler in BASIC

Post by vitali »

Угу, в Микропрофессоре очень медленный Васик. Я, вроде, тест 8 ферзей когда-то прогонял - очень тормоз
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: 6502 Assembler in BASIC

Post by vitali »

Кстати, прежде чем писать полноценные утилиты, было бы здорово попробовать простейший Хэлловорлд на Асме. У меня так и не получилось вывести строку в экран
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

vitali wrote:
Lavr wrote:А попробуйте всё же - как звук из-под ассемблерной программы?

Code: Select all

10  REM ASSM PROGRAM
15  TEXT : HOME : PRINT " SOUND TEST: "
20  FOR LOC = 768 TO 786
30  READ BYTE
40  POKE LOC,BYTE
50  NEXT LOC
60  DATA 162,0,32,30,251,141,48,192,162,1,32,30,251,141,48,192,76,0,3
70  CALL 768 : REM ORG $300
Нет звука вообще
Использует подпрограмму из ПЗУ Эппл-][, видимо, ПЗУ не совместимы... :-?
vitali wrote:Кстати, прежде чем писать полноценные утилиты, было бы здорово попробовать простейший Хэлловорлд на Асме. У меня так и не получилось вывести строку в экран
Это пробовать можно - загрузчик в программе выше правильный.
Грузит на адрес 300Н и вызывает с этого адреса.
iLavr
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: 6502 Assembler in BASIC

Post by vitali »

Lavr wrote:
vitali wrote:Кстати, прежде чем писать полноценные утилиты, было бы здорово попробовать простейший Хэлловорлд на Асме. У меня так и не получилось вывести строку в экран
Это пробовать можно - загрузчик в программе выше правильный.
Грузит на адрес 300Н и вызывает с этого адреса.
Скорее всего да, вызов сработает, но тут что-то с видеопамятью, помните, в другой ветке я пытался в видеопамять писать? Безуспешно
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

vitali wrote:...тут что-то с видеопамятью, помните, в другой ветке я пытался в видеопамять писать? Безуспешно
С видеопамятью, я так думал, что мы ещё тогда всё выяснили - нет у MPF-II текстового буфера, как такового.
Текстовые режимы он эмулирует графически.

Поэтому на ассемблере имеет смысл выводить сообщение как-то так:

Code: Select all

COUT     gequ  $FDED                    ;The Apple II character output func.

         keep  HelloWorld

main     start
         ldx   #0                       ;Offset to the first character
loop     lda   msg,x                    ;Get the next character
         cmp   #0                       ;End of the string?
         beq   done                     ;->Yes!
         jsr   COUT                     ;Print it out
         inx                            ;Move on to the next character
         jmp   loop                     ;And continue printing
done     rts                            ;All finished!

msg      dc    c'Hello world.'
         dc    h'0D'
         dc    h'00'
         end
Функцию COUT equ $FDED MPF-II поддерживает.
FDED.PNG
Вот только я это проверить не могу, т.к. здесь: https://www.calormen.com/jsbasic/ машинный код не поддерживается. :-?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

Lavr wrote:Функцию COUT equ $FDED MPF-II поддерживает.
Вот только я это проверить не могу, т.к. здесь: https://www.calormen.com/jsbasic/ машинный код не поддерживается. :-?
Нашел я другой эмулятор Apple-][: https://virtualconsoles.com/online-emulators/apple-ii/
И он у меня следующий код на экран-таки выводит! :kruto:

Code: Select all

10  TEXT : HOME
20  FOR LOC = 768 TO 806
30  READ BYTE
40  POKE LOC,BYTE
50  NEXT LOC
60  DATA 162,0,189,17,3,201,255,208
65  DATA 1,96,32,237,253,232,76,2,3
70  DATA 72,69,76,76,79,33,32,65,80
75  DATA 80,76,69,45,93,91,32,33,13
80  DATA 32,13,255,255
85  CALL 768
90  END
Ассемблерный оригинал взял у самого себя (Hello.asm):

Code: Select all

;--- Hello.asm ------------------
      ldx #$00      ; index
loop: lda messg,x   ; get symbol
      cmp #$ff      ; it's END?
      bne here      ; No, continue
      rts           ; return
here:
      jsr $FDED     ; send byte
      inx           ; inc index
      jmp loop
messg:
      dcb $48,$45,$4C,$4C,$4F,$21,$20
      dcb $41,$50,$50,$4C,$45,$2D,$5D
      dcb $5B,$20,$21,$0D,$20,$0D,$FF
Кое-что подправил и по месту же скомпилировал в HEX.
Какая-то ошибочка выскакивает... но искать неохота: в принципе - работоспособно.

P.S. Код $0D = 13 эмулятор по-своему понял, почему-то как М. В остальном - всё путём!
hello.PNG
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: 6502 Assembler in BASIC

Post by vitali »

Да, в Apple-II это таки работает.
В Микропрофессоре эта программка крашится с выводом регистров Монитором.

Надо курить в подпрограммы Монитора для вывода текста в экран
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

vitali wrote:В Микропрофессоре эта программка крашится с выводом регистров Монитором.
Надо курить в подпрограммы Монитора для вывода текста в экран
Насколько я всё прочитал - есть возможность выйти в Монитор-отладчик с весьма приличными
возможностями - даже дизассемблировать умеет, и всё остальное - тоже.
И "курить" уже под отладкой непосредственно в самом MPF-II.

Я уже даже оффлайн эмулятор Apple-][ скачал, и под ним код работает идентично!
hello1.PNG
hello2.PNG
Насчет текстового буфера: в MPF-II всё работает несколько иначе, судя по мануалу.
MPF-II записывает в текстовый буфер то, что уже вывел графически на экран.
Я так полагаю - упростили задачу чтения символа в позиции курсора.
"Специалист" - тоже с чисто графическим выводом, в нем текстовый буфер не организовали,
поэтому при необходимости чтения символа в позиции курсора он его графически по байтам
с экрана и распознаёт, что очень медленно и порой довольно неточно.
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 »

Что-то я потерялся в мозгах этого Недопрофессора...

Взял пример из Мануала, где Монитором выводят 26 букв алфавита через ту самую подпрограмму COUT

Code: Select all

FDEDH
и оставил только одну букву, убрав цикл.

Почему

Code: Select all

 LDA #$C1
загружает код буквы "А"? C1 (193) ведь не ASCII код буквы "А".

С другой стороны, если оставить 7 бит, то

Code: Select all

11000001
превращается в

Code: Select all

1000001 = 65
, а это уже ASCII "A".

У Недопрофессора 7-битная кодовая таблица? В мануале что-то не нашел об этом
You do not have the required permissions to view the files attached to this post.
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

Вот оно что...
You do not have the required permissions to view the files attached to this post.
User avatar
vitali
Senior
Posts: 136
Joined: 17 Sep 2019 09:34
Location: Finland

Re: Micro-Professor MPF-II Assembler

Post by vitali »

В общем, не все так просто с мануалом. Кодовая таблица, похоже, совпадает с заглавными буквами, остальное непонятно. Видимо, прошивка моего Недопрофессора отличается от общепринятых:
You do not have the required permissions to view the files attached to this post.
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

      ;.org $400 
	  ldx #$00      ; index
loop: lda messg,x   ; get symbol
      cmp #$ff      ; it's END?
      bne here      ; No, continue
      rts           ; return
here:
      jsr $FDED     ; send byte
      inx           ; inc index
      jmp loop
messg:
      dcb $A2,$00,$BD,$11,$04,$C9,$FF
      ....
      dcb $CF,$D2,$CC,$C4,$8D,$FF

Code: Select all

10  REM HELLO ASM
11  TEXT : HOME
20  FOR LOC = 1024 TO 1054
30  READ BYTE
40  POKE LOC,BYTE
50  NEXT LOC
60  DATA 162,0,189,17,4,201,255,208
65  DATA 1,96,32,237,253,232,76,2
70  DATA 4,200,197,204,204,207,160
75  DATA 215,207,210,204,196,141
80  DATA 255,255
85  CALL 1024
90  END
Скриншот из Васика ниже
You do not have the required permissions to view the files attached to this post.