User Tag List

Показано с 1 по 10 из 13

Тема: Вопросы по МК-90

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #7

    Регистрация
    16.02.2011
    Адрес
    Szczecin, Польша
    Сообщений
    25
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    24
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Постараюсь постепенно отвечать.

    Цитата Сообщение от Yprit Посмотреть сообщение
    1. Как опрашивается клавиатура?
    1. Пример использования подпрограмм из ПЗУ версии 1.0, ассемблер MACRO11:

    Код:
    	.asect
    	.radix	10
    
    	GETCH = ^O131120
    	PUTCH = ^O116542
    
    	.=	0
    
    	nop			;obligatory
    	jsr	pc,@#^O153700
    	jsr	pc,@#^O120536
    	mov	@#^O034022,@#^O164000
    	mov	#^O104306,@#^O164002
    again:	jsr	pc,GETCH	;R2 = ASCII code of the pressed key
    	jsr	pc,PUTCH	;display the character R2
    	br	again
    
    	.=	^O000310
    
    	.word	^O130514, 0	;keyboard interrupt vector
    2. Программа отображает скан-код нажатой клавиши. ПЗУ не используется. Ассемблер PDPXASM:

    Код:
    ; reading the keyboard using interrupts
    
    	.radix	16
    
    	.loc	0
    
    	nop			;obligatory!
    	mtps	#E0		;disable interrupts
    	mov	#scr,r0		;display RAM
    	mov	r0,@#E800
    	mov	#88C6,@#E802
    ; clear the display RAM
    	mov	#1E0,r1
    cls:	clr	(r0)+
    	sob	r1,cls
    	br	cont
    
    	.loc	100
    
    cont:	mov	#keysr,@#C8	;keyboard controller interrupt vector
    	clr	@#CA
    	mov	#36,@#E812	;slow clock
    	mov	#EA,@#E814
    	mtps	#0
    
    ; continuously read and display the keyboard scan code
    again:	wait			;wait for a pressed key
    	mov	keycod,r3
    	mov	#scr,r0
    	jsr	pc,hex
    	br	again
    
    ; keyboard interrupt handle routine
    keysr:	mov	#^XF2,@#E814
    	clr	@#E816
    keyb1:	tstb	@#E814
    	bpl	keyb1
    	mov	@#E816,keycod
    keyb2:	tstb	@#E814
    	bpl	keyb2
    	mov	#EA,@#E814
    	rti
    
    ; display the byte R3 at the screen address R0
    hex:	jsr	pc,hex1
    hex1:	mov	#4,r4
    	clr	r1
    hex2:	rolb	r3
    	rol	r1
    	sob	r4,hex2
    	jsr	pc,putc
    	rts	pc
    
    ; display the character R1 at the screen address R0,
    ; advance the pointer R0 to the next column
    putc:
    ; R1 <- 6 * R1
    	asl	r1		;* 2
    	mov	r1,-(sp)
    	asl	r1		;* 4
    	add	(sp)+,r1	;* 6
    	add	#chars,r1
    	mov	#6,r2
    putc1:	movb	(r1)+,(r0)
    	add	#1E,r0
    	sob	r2,putc1
    	sub	#B2,r0		;6 * 1E - 2 = B2
    	rts	pc
    
    ; characters, width = 8 pixels, height = 6 pixels
    chars:	.byte	3C, 46, 4A, 52, 62, 3C	;digit '0'
    	.byte	18, 28, 8,  8,  8,  3E	;digit '1'
    	.byte	3C, 42, 2,  3C, 40, 7E	;digit '2'
    	.byte	3C, 42, C,  2,  42, 3C	;digit '3'
    	.byte	8,  18, 28, 48, 7E, 8	;digit '4'
    	.byte	7E, 40, 7C, 2,  42, 3C	;digit '5'
    	.byte	3C, 40, 7C, 42, 42, 3C	;digit '6'
    	.byte	7E, 2,  4,  8,  10, 10	;digit '7'
    	.byte	3C, 42, 3C, 42, 42, 3C	;digit '8'
    	.byte	3C, 42, 42, 3E, 2,  3C	;digit '9'
    	.byte	3C, 42, 42, 7E, 42, 42	;'A'
    	.byte	7C, 42, 7C, 42, 42, 7C	;'B'
    	.byte	3C, 42, 40, 40, 42, 3C	;'C'
    	.byte	78, 44, 42, 42, 44, 78	;'D'
    	.byte	7E, 40, 7C, 40, 40, 7E	;'E'
    	.byte	7E, 40, 7C, 40, 40, 40	;'F'
    
    keycod:	.blkw	1
    
    	.loc	200
    
    scr:
    - - - Добавлено - - -

    Цитата Сообщение от Yprit Посмотреть сообщение
    2. Можно ли с СМП загружать больше 3.5 килобайт сразу?
    Да, можно, ограничений нет.

    Можно ли оставить на машинный код больше, чем 4.5 килобайт?
    В игре "Жизнь" я хотел чтобы модул СМП можно было одновременно использовать для хранения машинного кода и программ на Бейсике. Если такого требования нет, можно все 10 килобайт оставить на машинный код.

    Кстати, встречаются разные загрузчики. В игре "Жизнь" был скопирован с ПЗУ 1.0, примерно с адреса 0xF8EC. А вот "Эмулятор терминала" использует подпрограмму ПЗУ по адресу 0xBBBA.

    3. Влияет ли Бейсик на работу после загрузки кодов?
    Думаю, что только если вызывать связанные с ним подпрограммы из ПЗУ.

    4. Есть ли ограничения на вызов подпрограмм из ПЗУ?
    Возможно есть, в зависимости от подпрограммы. Например GETCH из первого примера выводит на экран статус кнопок Р/Л и В/Н. Наверно можно это предотвратить изменяя какую-то системную переменную.
    Точно тяжело сказать. Пока я разобрал только небольшой фрагмент кода ПЗУ
    Последний раз редактировалось piotr433; 15.01.2022 в 12:36. Причина: ошибка в коде: MTPS #E00 вместо MTPS #E0

    Эти 3 пользователя(ей) поблагодарили piotr433 за это полезное сообщение:

    nzeemin(15.01.2022), Oleg N. Cher(14.01.2022), Yprit(14.01.2022)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Мои вопросы
    от Viktor2312 в разделе Разное
    Ответов: 2
    Последнее: 05.04.2015, 21:26
  2. Famitracker: вопросы
    от evgs в разделе Творчество
    Ответов: 3
    Последнее: 28.09.2010, 00:08
  3. Статистические вопросы ?
    от AAA в разделе Форум
    Ответов: 25
    Последнее: 22.07.2008, 20:44
  4. Вопросы и ответы
    от Addison в разделе ZX Концепции
    Ответов: 31
    Последнее: 28.11.2007, 11:35

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •