|
Post by DarioG on Jul 15, 2024 9:29:13 GMT
GD24032 a 32bit CPU:
32 registers, 32bit wide highly orthogonal instruction set 15 addressing modes: Immediate, Register Direct, Register Indirect (with and without base offset, both short and long), Register Indirect with Pre and Post increment, Pre and Post decrement, Register Indirect with opional base offset and 2 registers), Far (64bit) Register Direct and Indirect (with and without base offset)
32bit address space, optionally 64 8/16/32/64bit operations 4 CPU modes, User/IRQ/Super 32 interrupt levels Trap handling (30 system and 64 user) Remappable register set (for fast context switching)
|
|
|
Post by DarioG on Jul 15, 2024 9:29:35 GMT
|
|
|
Post by DarioG on Jul 22, 2024 19:31:49 GMT
new version: some new instructions, added conditional execution for many of them, overall optimization youtu.be/ZPQCNcxgpzM
|
|
|
Post by DarioG on Aug 4, 2024 15:16:51 GMT
|
|
|
Post by DarioG on Aug 4, 2024 15:17:57 GMT
|
|
|
Post by DarioG on Aug 6, 2024 11:13:01 GMT
v5, some more video BIOS + Assembler complete and bug fix HEX print, plus CR/LF
|
|
|
Post by DarioG on Aug 9, 2024 12:17:43 GMT
more HEX print, more features (Exception structure)
|
|
|
Post by DarioG on Aug 10, 2024 14:40:24 GMT
some code examples
public calc_vidpos calc_vidpos: MOV.d R2,0x0b8000 ;(CGA base) CLR.d R8 MOV.b R8,[cursor_y] MUL.d R8,40*2 ; *2, char + colore ADD.b R8,[cursor_x] ADD.b R8,[cursor_x] ; *2, char + colore ADD.d R2,R8 RET
hex2asc: ; entra R0=digit AND.b R0,0xf ADD.b R0,'0' CMP.b R0,'9' RET c ADD.b R0,'A'-('9'+1) RET print_dec_number: ; entra R0=numero (<100000) ENTER R10,16 CLR.B [R10--] ; marker... TB.d R0,31 NEG nz,R0 PUSH.d R0 MOV.b R0,'-' CALL nz,putchar POP.d R0 print_dec_number3: DIV.d R0,10 PUSH.d R0 MOV.d.f R0,R0 ; se resto e quoziente=0 BEQ print_dec_number2 SWAP.d R0 ; recupero il resto ADD.b R0,'0' MOV.B [R10--],R0 POP.d R0 AND.d R0,0xffff JR print_dec_number3 print_dec_number2: MOV.B.f R0,[++R10] BEQ print_dec_number4 CALL putchar JR print_dec_number2 print_dec_number4: LEAVE R10 RET
org 0x800 ;0800 trap gestione video: entra R8=servizio VIDEO_SVC EQU 4 VIDEO_INIT EQU 0 ; 0=reset/init schermo R0=modo VIDEO_CLS EQU 1 ; 1=CLS R0=colore VIDEO_CHAR EQU 2 ; 2=PutChar R0=char R1=colore VIDEO_SETXY EQU 3 ; 3=SetXY R0=x R1=y VIDEO_PRINT EQU 4 ; 4=Print 0-term R0=string address R1=colore VIDEO_SVC_MAX EQU 5
CMP.b.f R8,VIDEO_SVC_MAX BNC trap4_err
AND.d r8,255 JMP (r8+trap4_table)
trap4_err: CLR.b R0 RETI
|
|
|
Post by DarioG on Aug 10, 2024 17:52:41 GMT
some more debugging and fine-tuning, plus test code (itoa, etc)
|
|
|
Post by DarioG on Aug 11, 2024 22:16:21 GMT
|
|
|
Post by DarioG on Aug 13, 2024 10:17:42 GMT
|
|