Не, ну какой вредный.
Вот вариант с A19 - https://disk.yandex.ru/d/OoTICcrkyOMKEQ
Можно еще один подрисовать, где по A19 рулить выбором ПЗУ или ОЗУ, но тогда сам понимаешь надо будет играться с сегментами и об этом надо будет помнить.
Не, ну какой вредный.
Вот вариант с A19 - https://disk.yandex.ru/d/OoTICcrkyOMKEQ
Можно еще один подрисовать, где по A19 рулить выбором ПЗУ или ОЗУ, но тогда сам понимаешь надо будет играться с сегментами и об этом надо будет помнить.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Для A19 надо добавить регистр. И если уж использовать А19, то еще проще было бы поделить адресное пространство пополам - A19=0 это RAM, A19=1 - ROM. Но я догадываюсь, что это предложение не найдет поддержки.
- - - Добавлено - - -
Кстати, на мой взгляд логично было бы добавить регистр для A19 вместо D46.
В тех даташитах, которые я читал, про A16-A19/S3-S6 написано так:
ADDRESS/STATUS: During T1, these are the four most significant address lines for memory operations. During I/O operations, these lines are LOW. During memory and I/O operations, status information is available on these lines during T2, T3, TW, and T4.
Какие проблемы и с адаптацией какого ПО? Правда это вопрос больше к Mickу. Мне кажется, что иметь 64 Кб озу лучше, чем 48.
- - - Добавлено - - -
И на временных диаграммах минимального режима так нарисовано. Например интеловский даташит, даташит 80с88 renesas
Точно стиль программирования тут будет отличаться.
Да и тут не стоит задача именно использовать все 64кб. А так конечно интересная идея использовать A19 как разделение ПЗУ и ОЗУ. Кстати я так подумал, если разделять, то похоже надо будет активно юзать сегменты.
Кстати вопрос про программирование.
Как задать TASM чтобы он компилил с 0 а не со 100h
Просто я в основном раньше com программки писал и там шапка простая
.MODEL TINY
.CODE
.STARTUP
В общем как получить бинарник вместо com файла.
- - - Добавлено - - -
Похоже да, надо защелку ставить на A19 и по ALE защелкивать. Но это типа уже ТМ7 похоже
То есть как бы назад к первоначальной идеей с триггером не вернуться.
Последний раз редактировалось Mick; 02.06.2022 в 15:00.
Да, что то я стал забывать, посмотрел, действительно, надо его защелкивать инверсным ALE на тм2. И как раз увидел еще момент - на А18 в моменты активности /RD или /WR присутствует флаг разрешения прерываний. Соответственно можно эту ножку именно по /RD защелкивать на второй половинке тм2, и этим управлять разрешением прерывания от NMI.
Видишь, как здорово, даже ошибиться особо негде (я про схему начального пуска).
Поправил печатную плату согласно последней схеме с A19
- - - Добавлено - - -
Тут в качестве оффтопа нашел у себя на работе старую плату от факса и там вон какая плюшка
UPD70208 - NEC V40 и он тоже умеет эмулировать 8080А, ссылка на даташит - https://www.google.com/url?sa=t&rct=...54273844674378
- - - Добавлено - - -
Нашел пример, как типа эмуляция включается V20
Код:; SBCV20 terminal test program ; Assembler: asm86.com/asm86.cmd ; MEM equ 0000h ;Memory top ROM equ 8000h ;Rom top STACK equ 8000h ;Stack top REGAD equ 00h ;8251 data register REGAC equ 01h ;8251 control register RTSHIG equ 17h ;RTS high RTSLOW equ 37h ;RTS low ; BUFSIZ equ 128 ;Buffer size(2^n, max128) FULSIZ equ BUFSIZ*14/16 ;Buffer almost full ; dseg MEM org 0000h ; ; Interrupt vector DEVERR rw 2 ;Devide error BRKFLG rw 2 ;Break flag NMIREQ rw 2 ;Non maskable interrupt BR3INS rw 2 ;BRK3 instruction BRVINS rw 2 ;BRKV instruction CHKINS rw 2 ;CHKIND instruction org 0400h-20 VGETCH rw 2 ;CALLN 251 VKBHIT rw 2 ;CALLN 252 VPUTCH rw 2 ;CALLN 253 VBRKEM rw 2 ;BRKEM 254 INTREQ rw 2 ;External interrupt ; ; Receive buffer RECBUF rb BUFSIZ RBFRDP rw 1 RBFWTP rw 1 RBFCNT rb 1 ; cseg MEM org ROM ; ; 8251 -> buffer by interrupt ; intsr: push ax ;Save ax push bx ;Save bx in al,REGAD ;Get char mov ah,al ;Save it ; mov al,RBFCNT ;Get count of chars cmp al,BUFSIZ ;Buffer full? jz isext ;If yes, ignore inc al ;Count up mov RBFCNT,al ;Update cmp al,FULSIZ ;Buffer almost full? jnz isst1 ;If no, skip flow control mov al,RTSHIG ;RTS control out REGAC,al ;Out it ; isst1: mov bx,RBFWTP ;Get write point mov al,ah ;Restore char mov [bx],al ;Write char into buffer ; inc bl ;Next write point and bl,BUFSIZ-1 ;Wrap mov RBFWTP,bx ;Update ; isext: pop bx ;Restore bx pop ax ;Restore ax sti ;Enable interrupt iret ; ; buffer -> al getch: push bx ;Save bx ; gcst1: mov al,RBFCNT ;Get count of chars cmp al,0 ;Buffer enpty? jz gcst1 ;If yes, wait cli ;Disable interrupt ; mov al,RBFCNT ;Critical timing measures cmp al,FULSIZ ;Need flow control? jnz gcst2 ;If no, skip flow control mov ah,al ;Save char mov al,RTSLOW ;RTS control out REGAC,al ;Out it mov al,ah ;Restore char gcst2: dec al ;Count down mov RBFCNT,al ;Update ; mov bx,RBFRDP ;Get read point mov al,[bx] ;Read char from buffer ; inc bl ;Next read point and bl,BUFSIZ-1 ;Wrap mov RBFRDP,bx ;Update ; pop bx ;Restore bx sti ;Enable interrupt ret ; ; al -> 8251 putch: push ax ;Save char ; pcst1: in al,REGAC ;Get status and al,01h ;check TxBUF enpty jz pcst1 ;wait for empty ; pop ax ;Restore char out REGAD,al ;Out it ret ; ; put string puts: cld ;set DF for SI increment ptst1: lodsb ;get data to AL and SI++ cmp al,00h ;check tail jz ptext ;if tail, return call putch ;display a charactor jmp ptst1 ;loop until tail ptext: ret ; ; message ckcpu db 13,10,'PROCESSOR: ',0 nec db 'NEC V20(uPD70108)',13,10,0 intel db 'Intel 8088',13,10,0 ; ; CALLN wrapping ngetch: call getch iret nkbhit: mov al,RBFCNT ;Get count of chars iret nputch: call putch iret ; ; start start: mov ax,cs ;set com model mov ds,ax mov es,ax mov ss,ax mov sp,STACK ;set stack ; mov VGETCH,offset ngetch mov VGETCH+2,ax mov VKBHIT,offset nkbhit mov VKBHIT+2,ax mov VPUTCH,offset nputch mov VPUTCH+2,ax mov VBRKEM,offset emu80 mov VBRKEM+2,ax mov INTREQ,offset intsr mov INTREQ+2,ax ; ; 8251 setup mov dx,REGAC mov al,00h ;Default mode or no operation out dx,al ;Try command out dx,al ;Try command out dx,al ;Try command mov al,40h ;reset out dx,al ;Delay mov CX,16 ;Delay loop $ ;Delay mov al,4eh ;mode out dx,al ;Out it mov al,37h ;command out dx,al ;Out it ; ; Buffer initialize xor al,al ;Clear al mov RBFCNT,al ;Set count of chars mov ax,offset RECBUF ;Get buffer top mov RBFRDP,ax ;Set read point mov RBFWTP,ax ;Set write point ; sti ;Enable interrupt ; ; display CPU mov si,offset ckcpu ;set message top call puts ;display message ; ; Check CPU mov ax,0101h db 0d5h,10h ;aad 10h cmp al,0Bh ;NEC V20 ignores the argument je isv20 mov si,offset intel isV20: call puts ; ; Emulation sequence db 0fh,0ffh ;BRKEM db offset VBRKEM/4 ;Vector number ; emu80: db 21h ;LXI dw offset hello string: db 7Eh ;MOV A,M db 0FEh,0 ;CPI 0 db 0CAh ;JZ dw offset loop db 0EDh,0EDh,0FDh ;CALLN 253(putch) db 23h ;INX H db 0C3h ;JMP dw offset string loop: db 0EDh,0EDh,0FBh ;CALLN 251(getch) db 0EDh,0EDh,0FDh ;CALLN 253(putch) db 0C3h ;JMP dw offset string ; hello: ;HELLO, WORLD,CR,LF,0 db 48h,45h,4Ch,4Ch db 4Fh,2Ch,20h,57h,4Fh,52h db 4Ch,44h,0Dh,0Ah,00 ; ; reset org 0fff0h db 0eah ;jmp dw start ;offset dw 0000h ;segment ; end
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)