🎓 第30课:毕业项目——8位复古电脑

📖 本课目标

恭喜你走到了最后一课!在毕业项目中,我们将把30课学到的一切融会贯通,完成一台真正可运行的8位复古电脑——从CPU到BASIC,从硬件到软件,全部由你亲手打造。这不仅是一个项目,更是你对计算机科学从底层到顶层的完整理解。

🏆 项目总览:Retro8 8位复古电脑

Retro8 完整系统 - 你的毕业作品 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┌────────────────────────────────────────────────────────┐ │ Retro8 系统规格 │ │ │ │ CPU: 8位自定义RISC/CISC混合架构 │ │ 56条指令, 8个通用寄存器, 16位地址总线 │ │ │ │ 内存: 64KB地址空间 │ │ 30KB RAM + 2KB VGA缓冲 + 30KB ROM │ │ + 1.25KB 字符ROM + 256B I/O映射 │ │ │ │ 显示: 80×25 VGA文本模式, 16色, 8×8字符 │ │ 输入: PS/2键盘, UART串口 │ │ 定时: 16位可编程定时器, 4级预分频 │ │ IO: 8位GPIO, 方向可配, 边沿中断 │ │ 中断: 8源可屏蔽中断控制器, 固定优先级 │ │ │ │ 软件: 监控程序 + Tiny BASIC解释器 │ │ 工具: 两遍扫描汇编器 (Python) │ │ │ │ 验证: Verilator仿真 + UART终端交互 │ └────────────────────────────────────────────────────────┘

📋 30课知识图谱

让我们回顾这30课的完整知识体系:

阶段课程核心知识关键Verilog模块
基础概念01-概述冯·诺依曼架构, 系统规划
02-布尔逻辑门电路, 布尔代数, 卡诺图basic_gates.v
03-组合逻辑多路器, 编码器, 加法器adder.v, mux.v
CPU核心04-寄存器D触发器, 寄存器文件reg_file.v
05-ALU算术逻辑单元设计alu.v
06-指令集ISA设计, 编码格式
07-指令解码操作码解码, 控制信号decoder.v
CPU实现08-控制器多周期状态机control.v
09-数据通路总线连接, 数据流datapath.v
10-单周期CPU完整CPU集成cpu_single.v
11-多周期CPU状态机优化cpu_multi.v
12-流水线基础5级流水线, 冒险cpu_pipe.v
内存系统13-存储器原理SRAM/DRAM, 时序sram.v
14-内存映射I/O映射, 地址解码addr_decode.v
15-ROM设计程序存储, 初始化rom.v
16-RAM设计数据存储, 读写时序ram.v
17-堆栈实现LIFO结构, 子程序调用stack.v
18-DMA基础直接内存访问dma.v
IO外设19-PS/2键盘串行协议, 扫描码ps2_keyboard.v
20-VGA文本时序生成, 字符渲染vga_text_mode.v
21-串口UART异步通信, 波特率uart.v
22-定时器可编程计数, 预分频timer.v
23-GPIO三态缓冲, 边沿检测gpio.v
24-中断控制器优先级仲裁, EOIinterrupt_controller.v
软件集成25-汇编器两遍扫描, 符号表retro8asm.py
26-监控程序交互式调试, HEX加载monitor.asm
27-BASIC基础词法分析, 表达式求值tinybasic.py
28-BASIC运算IO比较/逻辑, PEEK/POKEtinybasic_ext.py
29-系统集成顶层互连, 启动流程retro8_top.v
30-毕业项目完整系统, 验证, 展示

🎯 毕业项目要求

🔧 项目清单

要获得"8位复古电脑"毕业认证,你需要完成以下所有项目:

硬件验证(Verilator仿真)

软件验证

集成验证

🧪 毕业测试程序

测试1:系统自检

; syscheck.asm - 系统自检程序
.ORG $8000

SYS_CHECK:
    ; 1. RAM测试 - 棋盘格模式
    LDA #$55
    LDX #$00
RAM_WRITE:
    STA $0000,X
    INX
    BNE RAM_WRITE
    ; 读回验证
    LDX #$00
RAM_VERIFY:
    LDA $0000,X
    CMP #$55
    BNE RAM_FAIL
    INX
    BNE RAM_VERIFY
    ; 反向测试
    LDA #$AA
    LDX #$00
RAM_WRITE2:
    STA $0000,X
    INX
    BNE RAM_WRITE2
    LDX #$00
RAM_VERIFY2:
    LDA $0000,X
    CMP #$AA
    BNE RAM_FAIL
    INX
    BNE RAM_VERIFY2

    ; RAM OK - 显示成功信息
    LDA #'R'
    JSR PUTCHAR
    LDA #'A'
    JSR PUTCHAR
    LDA #'M'
    JSR PUTCHAR
    LDA #' '
    JSR PUTCHAR
    LDA #'O'
    JSR PUTCHAR
    LDA #'K'
    JSR PUTCHAR
    JMP CHECK_UART

RAM_FAIL:
    LDA #'!'
    JSR PUTCHAR
    JMP RAM_FAIL  ; 死循环

    ; 2. UART自环测试
CHECK_UART:
    LDA #'U'
    JSR PUTCHAR
    LDA #'A'
    JSR PUTCHAR
    LDA #'R'
    JSR PUTCHAR
    LDA #'T'
    JSR PUTCHAR
    LDA #':'
    JSR PUTCHAR
    ; 发送测试字节
    LDA #$42
    STA $FF00       ; 发送0x42
WAIT_TX:
    LDA $FF01
    AND #$40        ; TX_DONE
    BEQ WAIT_TX
    ; 检查接收
WAIT_RX:
    LDA $FF01
    AND #$20        ; RX_READY
    BEQ WAIT_RX
    LDA $FF00
    CMP #$42
    BNE UART_FAIL
    ; UART OK
    LDA #'O'
    JSR PUTCHAR
    LDA #'K'
    JSR PUTCHAR
    JMP ALL_PASS

UART_FAIL:
    LDA #'!'
    JSR PUTCHAR

ALL_PASS:
    LDA #$0D
    JSR PUTCHAR
    LDA #$0A
    JSR PUTCHAR
    LDA #'*'
    JSR PUTCHAR
    LDA #'*'
    JSR PUTCHAR
    LDA #'*'
    JSR PUTCHAR
    LDA #' '
    JSR PUTCHAR
    LDA #'P'
    JSR PUTCHAR
    LDA #'A'
    JSR PUTCHAR
    LDA #'S'
    JSR PUTCHAR
    LDA #'S'
    JSR PUTCHAR
    LDA #$0D
    JSR PUTCHAR
    LDA #$0A
    JSR PUTCHAR
    RTS

测试2:BASIC演示程序

10 REM Retro8 毕业演示
20 PRINT "================================"
30 PRINT "  Retro8 8-Bit Computer System"
40 PRINT "  Graduation Demo Program"
50 PRINT "================================"
60 PRINT
70 PRINT "Hardware Test:"
80 PRINT "  CPU: 8-bit custom ISA"
90 PRINT "  RAM: 30KB"
100 PRINT "  ROM: 30KB"
110 PRINT "  VGA: 80x25 text mode"
120 PRINT "  KBD: PS/2 interface"
130 PRINT "  UART: 115200 bps"
140 PRINT
150 PRINT "Software:"
160 PRINT "  Monitor + Tiny BASIC"
170 PRINT
180 PRINT "Starting countdown..."
190 FOR I = 10 TO 1 STEP -1
200 PRINT I; " ";
210 FOR D = 1 TO 500: NEXT D
220 NEXT I
230 PRINT
240 PRINT "BLAST OFF!"
250 PRINT
260 PRINT "System ready. Type BASIC commands."
270 END

测试3:VGA屏幕测试

10 REM VGA屏幕测试 - 填充不同颜色
20 FOR C = 0 TO 15
30 LET ROW = C / 2
40 LET BASE = &H7800 + ROW * 80
50 FOR I = 0 TO 79
60 POKE BASE + I, 65 + C    : REM 'A'到'P'
70 POKE BASE + I + 1, C*16+7: REM 背景色C + 白字
80 NEXT I
90 NEXT C
100 END

📋 你学到了什么

🎓 知识成就清单

数字逻辑基础

CPU设计

内存系统

IO外设

软件系统

🚀 下一步:无限可能

毕业不是终点,而是新的起点。你的8位复古电脑还有无限扩展空间:

🌟 进阶方向

FPGA实现

将Verilog代码烧录到真实的FPGA开发板(如iCE40、ECP5、Cyclone),连接真实的VGA显示器和PS/2键盘。这是从仿真到实物的跨越!

图形扩展

添加位图图形模式:320×200×4色或160×200×16色。实现精灵(Sprite)系统,编写简单的2D游戏。参考NES的PPU设计。

声音系统

实现PSG(可编程声音发生器):3个方波通道+1个噪声通道,参考AY-3-8910。用定时器产生不同频率的方波,通过DAC输出模拟音频。

软盘/SD卡

添加SPI接口连接SD卡,实现文件系统。BASIC程序可以保存到SD卡并随时加载。参考FAT16文件系统的最小实现。

网络扩展

通过UART连接ESP8266 WiFi模块,让8位电脑联网!实现简单的Telnet客户端或HTTP请求。想象一下用BASIC写一个网页爬虫。

编译器

为Retro8实现一个C语言子集编译器。从词法分析→语法分析→中间代码→目标代码生成,完整体验编译原理。

🏆🏆🏆 毕业成就:8位复古电脑创造者 🏆🏆🏆

恭喜你完成了30课的全部内容!你从最基础的布尔逻辑出发,一步步构建了:

这不是教科书上的理论——这是你亲手打造的真实电脑。从晶体管到BASIC,从0到1,你真正理解了计算机的每一个层次。这份理解,比任何证书都有价值。

你现在是真正的计算机架构师了。

🎉🎓🎉