找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 1774|回复: 10

linux学习的模仿,修改,单系统

[复制链接]
发表于 2026-2-7 07:31:37 | 显示全部楼层 |阅读模式
本帖最后由 zzz19760225 于 2026-4-28 15:57 编辑

一楼祭天
123456789
  1. http://zzz19760225.ysepan.com/
复制代码
隔一段时间建10楼一页面,其首位是具体内容,其余杂想或空置。
15楼一页?

20250627,换成perl为文字信息处理考虑,这样在以后自制和linux版国产操作系统,也会有perl吧
20250901,换成perl的Tk桌面图形模式
20251206,换成C语言SDL2图形考虑
20260113,换回perl+Tk的图形考虑(perl+Tk+ImageMagick+ffmpeg)
20260306,增加emacs lisp考虑。

  1. $a=<STDIN>;print "$a";
  2. a123:;print "123";goto a123;
  3. $a==123?"456":"789";
复制代码

  1. a123:
  2. print "请输入:";$a=<STDIN>;
  3. $a==456?print "789":goto a123;

  4. 请输入:123
  5. 请输入:456
  6. 789
  7. Press any keys to exit
复制代码

  1. 文字游戏
  2. 1游戏开始和结束,命令行执行文件和鼠标点击可执行文件,启动开始页面,开始游戏+游戏说明+退出游戏,ctrl+d,ctrl+c,关闭游戏窗口x,游戏过程中的退出,意外故障退出。
  3. 2玩家用户帐号的建增减删看,建立在程序文章里的#数据行,增减数据行,从开始游戏进入这个选择范围,游戏过程中随时调用这个模块。
  4. 3本体结构,从开始结束和帐号,进入菜菜城的前面部分,后面是以菜菜城和其他的名义居住地为中心,向外的相对移动选择。
  5. 4其外向外是重复流水线,流水线结构选择的通用和专用组合度数量。
  6. 5向外重复流水线的可选项内容,是设置的地图世界容器,每个容器里有其自身剧情设置的选择通用+专用度。
复制代码

  1. 山海经,山河经,地星村:
  2. 四海:东海(太平洋),南海(印度洋),西海(大西洋),北海(北冰洋);
  3. 八洲:北洲(格陵兰岛),风洲(北美洲),木洲(南美洲),南洲(南极洲),金洲(大洋洲),土洲(亚洲),水洲(欧洲),火洲(非洲);
  4. 土洲(亚洲)往东7000公里=14000里,1万4千里,是东海(太平洋);1一
  5. 东海(太平洋)往东7000公里=14000里,1万4千里,是风洲(北美洲);2壹
  6. 风洲(北美洲)往东5000公里=10000里,1万里,是西海(大西洋);3二
  7. 西海(大洋洲)往东5000公里=10000里,1万里,是水洲(欧洲);4贰
  8. 水洲(欧洲)往东7000公里=14000里,1万4千里,是土洲(亚洲);5叁
  9. 水洲(欧洲)往南5000公里=10000里,1万里,是火洲(非洲);6肆
  10. 土洲(亚洲)往南7000公里=14000里,1万4千里,是金洲(大洋洲);7伍
  11. 风洲(北美洲)往北5000公里=10000里,1万里,是北洲(格林兰岛);8陆
  12. 风洲(北美洲)往南7000公里=14000里,1万4千里,是木洲(南美洲);9柒
  13. 木洲(南美洲)往南7000公里=14000里,1万4千里,是南洲(南极洲);10捌
  14. 火洲(非洲)往东6000公里=12000里,1万2千里,是南海(印度洋);11三
  15. 南海(印度洋)往东6000公里=12000里,1万2千里,是金洲(大洋洲);
  16. 土洲(亚洲)往北6000公里=12000里,1万2千里,是北海(北冰洋);12四
复制代码
皇帝游戏和大航海游戏,1女母氏族部落人数超出太多,就分族外迁(女娲和西王母),父系氏族的炎黄等三皇五帝,2周对外分封的信息,对临近可能土地再分封的扩大,3秦统一后的对外延续,4五胡乱华等外租压迫下,崛起后的汉族对外陆海殖民,5宋明大商业的地主和资本家对外。(或者解放模式也可以,结合墨家概念平等,法家概念平等,儒家概念的大一统统一,私有化统一与公有度统一,都是可选项,但是不是游戏全部制作出来,而有那个可以制作的简单工具,玩家自己可以去逐渐增加点滴,积累成为游戏模块。或者大禹和夏启的能力工作权力极私独占奴隶制也可以,炎黄的养民)
1一天的容器模块,
2地星村外天文的模块(相对地球的日照光线形象学几何学为主),
3地星村内的年循环左升右降热量相对增减四季模块,
4整体的本体和环境,
5个体的本体和环境,
6整体与个体之间的进制联系组合关系一体化。
骑goto:
制造用文字游戏信息机器,
制=时空量化,人物增减量化,一个自动独立运行的信息机器世界,参与操作驾驶这个世界的玩家玩法
造=goto跑一遍标签阵列,完成一遍游戏后,再加入量化
用=?
浏览器下载300MB的Strawberry Perl的perl文件会断掉,迅雷拖着下载。要Strawberry Perl,方便网络下载什么的。或者不要下载吧,本身集成了,没搞懂。
安装Tk很慢,很久。
程序文件pl,要绑定perl53211.exe,不要绑定旁边的perl.exe。
ActivePerl自带Tk?
ADODB.Stream读取内存?
basic(qb语句)=qb64,freebaisc
在深度deepin linux下可以终端运行,就建立终端运行文件sh。

  1. #!/bin/bash
  2. chmod +x perlTkgif.pl
  3. perl perlTkgif.pl
复制代码
鼠标双击终端文件sh,通过这个终端文件打开pl,运行pl程序。(终端可运行,也许权限那句可以不需要了=chmod。

集成块硬件图形中文,逻辑电平与图形中文电平之间的翻译,在图形中文上抽象代表出来,成为中文编程或中文DOS的假设。

一,应该是道混沌无空能量在,
二,然后是能量形态和万物,走到表明太极阴阳相对关系,之后是圆自转,重复,循环的有序,顺序,排序=产生量。表面现象之量,到其内里之王的内因因果理,化学编程的能量自转自传锁定自私基因(?)。
三,1量(使用色点阵组合代表,总之组合的数量空间很大),
四,2类(声<声波,音乐>,色<图,文>),
五,3类组合(影视,有声有色的信息人模拟人与拟人拟物)。
但是如果中文编程,并不需要前面两者,只要后面三者。

第一,组合的法(进制法重复模式),这个法的数量要出来,并且这个数量是有序简单组合重复完成的。这个数量的代表形式,代数,代量,代字或代词。
第二,数量的排序序数序号提取。
第三,数量排序序数序号提取的单元容器,其内容具体组合的是什么。就是做这三步走。
1组合(单元太极阴阳相对联系关系组合),
2排序太集集合容器(同元排序=具有相同元的组合排序,异位排序=在不同的方位上有差异的组合排序),
3单元太集集合容器的具体组合内容。

三个概念部分渐进到数字化世界,每个部分又各自有其内部分类,最后到排序序数序号代表。
一个是抽象道,在,实,
二个是识别需求产生的排序,混沌,开天辟地,无,有,冇,空,不,0等,太极太集阴阳相对,
三个是太极太集阴阳相对为根源的太单元,相对联系关系组合形成的地图或联系关系体。相对这个关系一体的组构和解构,选择所需的模拟拟人拟物内容,并且使用排序数量来代表概念空间,完成模拟模仿。这个模拟模仿扩大了人的实选择空间,可以倍增探索尝试试验名范围的人概念空间,促进人的世界扩大。
有用制造用机器,通用制造用机器。

C语言SDL2图形考虑,两个部分:
1,图形部分的石坚白,存在即有象,内象外象本象,不论心意识/唯心或唯物,其可知可见的大概内容之一,与信息流编织成旋玑图全组合地图;
2,信息流的文本容器集合,以一个十进制16数字集自拍基本出发和中心区域,基本逻辑是太极容器的内外分解阴阳相对关系的组合聚散=开关。
3,声色两信息,色分为图画里的单图形文字,单图形图画,多图形图画,影视。信息分类,执行到类信息,就自动寻找对应的功能程序执行该信息内容,并且句柄管道开关输出到同一个页面容器里。

0,1,2,3,4,5,6,7,8,9,a,[,],[;],[:],[。]。
1,2,3,4,5,6,7,8,9,0,a,[,],[;],[:],[。]。
1,2,3,4,5,6,7,8,9,0,回,[,],[;],[:],[。]。


1信息单元组合无限地图世界,2地图里的一次编程,3一次编程基础上的二次编程(AI自动信息自转自传)。

tty的zhcon需要fbset(修改操作framebuffer)
sudo apt install fbset
sudo usermod -aG video $USER     #/dev/fb0 通常属于 video 组,加入获取权限的执行。
重启以获取权限。
fbset -i    # 查看详细 framebuffer 模式

  1. mode "1440x900-60"
  2.     geometry 1440 900 1440 900 32
  3.     timings 0 0 0 0 0 0 0
  4.     rgba 8/16,8/8,8/0,0/0
  5. endmode
复制代码
tty下中文:tty+zhcon(二合一,中文显示和中文全拼输入法)+ollama run qwen:0.5b(可以中文问答)+tty下图形编程
tty下记录script session.log 需要命令行做一个exit退出动作后(不会退出账户),才会输入到session.log文本。
tty C语言操作fb0的图形内容,先在桌面下编译好,处理了出错信息后,再转到tty下执行。
tty下输入:tty
/dev/fb0    (需要的内容)
/dev/pts/0 (图形界面,无法看到被图形界面覆盖了的输出图形,需要exit,会退出去。可能是zhcon的图形启动?)
tty,fb0,无限圈层级里,已有有限屏幕的极限位图,全组合的点阵字符集或点阵组合集。

重置密码
grub的选项栏,
按e,进入编辑内容,
在linux那一行的行尾,去掉最后两个单词quiet splas,加上systemd.unit=rescue.target
F10运行
出现运行页面,按一下按钮,出现root@帐号输入等待
输入mount -o remount,rw /
输入passwd+帐号
输入新密码,再次输入新密码
输入exec /sbin/init重新启动,进入用户和输入密码的图形页面(这一步就可以tty了)

在tty下安装图形
linux mint22.2图形界面桌面问题:
sudo dpkg --configure -a
# 5. 安装 Linux Mint 桌面
sudo apt install linuxmint-keyring
sudo apt install mint-meta-cinnamon    # 或 mint-meta-mate / mint-meta-xfce

tty+C语言+framebuffer,色象代表信息,信息代表声色。
tty+gas汇编+framebuffer+(多维数组的变量,中文显示和中文输入,鼠标等单多输入端口接口,页面浏览器文本,文字,动静帧图片,声音,影视)

在C语言SDL2图形库的程序代码中,最后一行注释编译和执行命令,对应防止忘记。

只有一个机器容器,,然后逐渐的增量。不是主板,而是键盘或鼠标开关。
键盘鼠标。
键盘鼠标+屏幕。
键盘鼠标+ 屏幕+电器主板功能。
键盘鼠标+屏幕+主板+内存。
键盘鼠标+屏幕+主板+内存+外存(算盘位移记录,打孔卡,钢,粉磁盘)。
键盘鼠标+屏幕+主板+内存+外存+芯片自动加工厂。

自动信息AI,通义:C语言SDL2制作一个虚拟机,LINUXMINT22.2
通义:C语言SDL2制作一个微软DOS下的debug.exe,LINUXMINT22.2

问题:在64位字节中,使用32位程序执行,能不能使用余下的32位存东西。按照说法是不可以的,执行文件是固化的,那么换成其他解释类语言呢。

中医许阳的基本中医部分,或菜菜城里的中医堂明心堂什么的,分为1基本理论,2基本看病,3基本治病三类集合。从冇逐渐增量的理论和实践,两者名实渐增,随着学习进步。
 楼主| 发表于 2026-2-7 07:32:16 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-3-6 16:02 编辑

1234567890
已有emacs的内容一般平常简化,主要是操作习惯上。其余基本不需要做,就算有需求,也分为可做和做不到的,可做的也排在已有简化之后。
鼠标一般的文本复制粘贴,在emacs上的模式套路。emacs页面上,鼠标右键点击的选项组。
game-emnu.el

  1. ;;; game-menu.el --- 简单的游戏菜单系统 -*- lexical-binding: t; -*-

  2. ;;; Commentary:
  3. ;; 一个简单的游戏菜单演示程序

  4. ;;; Code:

  5. (defvar game-menu--timer nil
  6.   "用于消息显示的定时器。")

  7. (defvar game-menu--current-page 1
  8.   "当前页面编号:1-主菜单,2-介绍页面,3-昵称输入页面。")

  9. (defvar game-menu--nickname ""
  10.   "存储玩家输入的昵称。")

  11. (defun game-menu-show-page1 ()
  12.   "显示第一个页面:主菜单。"
  13.   (interactive)
  14.   (setq game-menu--current-page 1)
  15.   (let ((buf (get-buffer-create "*游戏菜单*")))
  16.     (with-current-buffer buf
  17.       ;; 取消只读模式以便修改
  18.       (setq buffer-read-only nil)
  19.       (erase-buffer)
  20.       (insert "\n\n")
  21.       (insert "            === 勇者大闯关 ===\n\n\n")
  22.       
  23.       ;; 创建可点击的菜单项
  24.       (game-menu--insert-button "开始游戏" 'game-menu-start-game)
  25.       (insert "\n\n")
  26.       (game-menu--insert-button "介绍游戏" 'game-menu-show-intro-page)
  27.       (insert "\n\n")
  28.       (game-menu--insert-button "结束游戏" 'game-menu-exit)
  29.       
  30.       ;; 设置缓冲区为只读,防止意外修改
  31.       (setq buffer-read-only t)
  32.       (goto-char (point-min))
  33.       (forward-line 3))  ;; 移动到中间位置
  34.     (switch-to-buffer buf)))

  35. (defun game-menu-show-intro-page ()
  36.   "显示介绍页面,3秒后自动返回主菜单。"
  37.   (interactive)
  38.   (setq game-menu--current-page 2)
  39.   (let ((buf (get-buffer-create "*游戏菜单*")))
  40.     (with-current-buffer buf
  41.       (setq buffer-read-only nil)
  42.       (erase-buffer)
  43.       (insert "\n\n")
  44.       (insert "            === 游戏介绍 ===\n\n\n")
  45.       (insert "       这是勇者大闯关游戏!\n\n")
  46.       (insert "  这是一个简单的游戏菜单演示程序。\n\n")
  47.       (insert "  你可以通过鼠标点击来导航不同的页面。\n\n\n\n")
  48.       (insert "       3秒后自动返回主菜单...")
  49.       
  50.       ;; 设置介绍文字样式
  51.       (goto-char (point-min))
  52.       (forward-line 4)
  53.       (put-text-property (point) (line-end-position) 'face '(:foreground "green" :height 1.2))
  54.       
  55.       (setq buffer-read-only t)
  56.       (goto-char (point-min)))
  57.     (switch-to-buffer buf))
  58.   
  59.   ;; 取消之前的定时器(如果存在)
  60.   (when (timerp game-menu--timer)
  61.     (cancel-timer game-menu--timer))
  62.   
  63.   ;; 设置3秒后返回主菜单
  64.   (setq game-menu--timer
  65.         (run-with-timer 3 nil
  66.                         (lambda ()
  67.                           (when (buffer-live-p (get-buffer "*游戏菜单*"))
  68.                             (game-menu-show-page1)
  69.                             (message "返回主菜单"))
  70.                           (setq game-menu--timer nil)))))

  71. (defun game-menu-show-page2 ()
  72.   "显示第二个页面:昵称输入页面。"
  73.   (interactive)
  74.   (setq game-menu--current-page 3)
  75.   (let ((buf (get-buffer-create "*游戏菜单*")))
  76.     (with-current-buffer buf
  77.       (setq buffer-read-only nil)
  78.       (erase-buffer)
  79.       (insert "\n\n")
  80.       (insert "            === 输入昵称 ===\n\n\n")
  81.       (insert "你的昵称:")
  82.       
  83.       ;; 创建输入区域
  84.       (let ((start (point)))
  85.         (insert " [点击这里输入昵称] ")
  86.         (put-text-property start (point) 'face '(:background "gray80" :foreground "black"))
  87.         (put-text-property start (point) 'mouse-face '(:background "yellow"))
  88.         ;; 使用更简单的方法绑定点击事件
  89.         (insert-button "[点击输入]"
  90.                       'action (lambda (_) (game-menu--input-nickname))
  91.                       'follow-link t
  92.                       'face '(:foreground "blue" :underline t)))
  93.       
  94.       (insert "\n\n\n")
  95.       
  96.       ;; 如果已经有昵称,显示出来
  97.       (when (not (string= game-menu--nickname ""))
  98.         (insert "当前昵称: ")
  99.         (insert game-menu--nickname)
  100.         (insert "\n\n\n"))
  101.       
  102.       (game-menu--insert-button "返回菜单" 'game-menu-show-page1)
  103.       (insert "\n\n")
  104.       (game-menu--insert-button "去菜菜城" 'game-menu-to-caicai)
  105.       
  106.       (setq buffer-read-only t)
  107.       (goto-char (point-min)))
  108.     (switch-to-buffer buf)))

  109. (defun game-menu--input-nickname ()
  110.   "输入昵称。"
  111.   (interactive)
  112.   (let ((new-nick (read-string "请输入你的昵称: " game-menu--nickname)))
  113.     (when (not (string= new-nick ""))
  114.       (setq game-menu--nickname new-nick)
  115.       ;; 刷新页面2以显示新昵称
  116.       (game-menu-show-page2)
  117.       (message "昵称已设置为: %s" game-menu--nickname))))

  118. (defun game-menu--insert-button (text callback)
  119.   "插入一个按钮,显示TEXT,点击时调用CALLBACK。"
  120.   (let ((start (point)))
  121.     (insert text)
  122.     ;; 设置按钮样式
  123.     (put-text-property start (point) 'face '(:foreground "blue" :underline t :weight bold))
  124.     (put-text-property start (point) 'mouse-face '(:background "yellow"))
  125.     (put-text-property start (point) 'help-echo (format "鼠标点击: %s" text))
  126.     ;; 创建简单的按键映射
  127.     (let ((map (make-sparse-keymap)))
  128.       (define-key map [mouse-1]
  129.         (lambda () (interactive)
  130.           (when (functionp callback)
  131.             (funcall callback))))
  132.       (put-text-property start (point) 'keymap map))))

  133. (defun game-menu-start-game ()
  134.   "开始游戏 - 进入昵称输入页面。"
  135.   (interactive)
  136.   (game-menu-show-page2))

  137. (defun game-menu-exit ()
  138.   "结束游戏 - 关闭菜单缓冲区。"
  139.   (interactive)
  140.   (when (y-or-n-p "确定要退出游戏吗?")
  141.     (kill-buffer "*游戏菜单*")
  142.     (message "游戏结束,欢迎下次再来!")))

  143. (defun game-menu-to-caicai ()
  144.   "去菜菜城 - 当前功能空置,仅显示提示。"
  145.   (interactive)
  146.   (message "去菜菜城功能正在开发中,敬请期待...")
  147.   ;; 让提示停留3秒
  148.   (sit-for 3))

  149. ;;;###autoload
  150. (defun game-menu ()
  151.   "启动游戏菜单。"
  152.   (interactive)
  153.   (game-menu-show-page1)
  154.   (message "欢迎来到勇者大闯关!使用鼠标点击菜单项开始游戏。"))

  155. (provide 'game-menu)

  156. ;;; game-menu.el ends here
复制代码
alt+x,类似秘籍输入框,输入eval-buffer,就是加载文件,生成game-menu。
alt+x,类似秘籍输入框,输入game-menu就是执行文件。
显示菜单名和开始,介绍,结束游戏三行文字。
鼠标点击介绍游戏,下面可以显示一行文字3秒,这是勇士大闯关游戏。点击结束游戏,会弹出退出游戏是否选项。开始游戏的鼠标点击,出现等待输入昵称,返回菜单,进入菜菜城三个内容。
 楼主| 发表于 2026-2-7 07:33:47 | 显示全部楼层

先终端

本帖最后由 zzz19760225 于 2026-3-26 08:05 编辑

1234567890
 楼主| 发表于 2026-2-7 07:34:11 | 显示全部楼层

“一个64位操作系统的设计与实现”书

本帖最后由 zzz19760225 于 2026-5-7 09:52 编辑

1234567890

2:1操作系统是什么,2环境搭建;

3:1引导,2内核,3应用;

5:1处理器,2引导,3内核,4内存,5调度=中断;

6:1驱动,2进程,3文件,4系统调用API,5命令行shell,6彩蛋nm。

引导(1芯片进程,2调度中断多进程,3设备驱动,4内存,5文件硬盘)
中心内变化1芯片与外变化3设备驱动两者之间的2调度进程活动,完成短期储存取4内存和长期储存取5文件硬盘的需求信息工程作业。
8:1引导,2芯片,3调度,4驱动,5短存,6长存,7输入,8输出。
1引导
2------芯片,调度,驱动
3-----------------------------短存,长存
4-------------------------------------------输入,输出


linux内核完全注释
0.11
两个oo,boot,tools
两个字母,fs,mm
345个字母,lib,init,kenle转6位
缺5
缺6,有6,kernel
78个字符,include,makelife
2234,678
 楼主| 发表于 2026-2-7 07:34:24 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-5-5 14:56 编辑

1234567890
一2.2环境搭建:
模拟环境搭建:虚拟机bochs(qemu)
编译环境操作系统:原书使用是centos6,已有linuxmint22.2,软件信息代码所生成的空间体=操作系统平台
  1. ./bochs -f bochsrc.txt -q
  2. ========================================================================
  3.                         Bochs x86 Emulator 2.7
  4.               Built from SVN snapshot on August  1, 2021
  5.                 Timestamp: Sun Aug  1 10:07:00 CEST 2021
  6. ========================================================================
  7. 00000000000i[      ] BXSHARE not set. using compile time default '/usr/local/share/bochs'
  8. 00000000000i[      ] reading configuration from bochsrc.txt
  9. 00000000000i[      ] Stopping on magic break points
  10. 00000000000i[      ] installing x module as the Bochs GUI
  11. 00000000000i[      ] using log file bochs.log
  12. Next at t=0
  13. (0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0
  14. <bochs:1> r
  15. eax: 0x00000000 0
  16. ebx: 0x00000000 0
  17. ecx: 0x00000000 0
  18. edx: 0x00000000 0
  19. esp: 0x00000000 0
  20. ebp: 0x00000000 0
  21. esi: 0x00000000 0
  22. edi: 0x00000000 0
  23. eip: 0x0000fff0
  24. eflags 0x00000002: id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf
  25. <bochs:2> a
  26. :2: syntax error at 'a'
  27. <bochs:3> b
  28. Error: pbreak of this kind not implemented yet.
  29. <bochs:4> c

  30. ^CNext at t=2020966106
  31. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  32. <bochs:5> d
  33. :5: syntax error at '
  34. '
  35. <bochs:6> e
  36. :6: syntax error at 'e'
  37. <bochs:7> f
  38. :7: syntax error at 'f'
  39. <bochs:8> g
  40. :8: syntax error at 'g'
  41. <bochs:9> h
  42. h|help - show list of debugger commands
  43. h|help command - show short command description
  44. -*- Debugger control -*-
  45.     help, q|quit|exit, set, instrument, show, trace, trace-reg,
  46.     trace-mem, u|disasm, ldsym, slist
  47. -*- Execution control -*-
  48.     c|cont|continue, s|step, p|n|next, modebp, vmexitbp
  49. -*- Breakpoint management -*-
  50.     vb|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,
  51.     bpe, bpd, d|del|delete, watch, unwatch
  52. -*- CPU and memory contents -*-
  53.     x, xp, setpmem, writemem, crc, info,
  54.     r|reg|regs|registers, fp|fpu, mmx, sse, sreg, dreg, creg,
  55.     page, set, ptime, print-stack, ?|calc
  56. -*- Working with bochs param tree -*-
  57.     show "param", restore
  58. <bochs:10> i
  59. :10: syntax error at 'i'
  60. <bochs:11> j
  61. :11: syntax error at 'j'
  62. <bochs:12> k
  63. :12: syntax error at 'k'
  64. <bochs:13> l
  65. :13: syntax error at 'l'
  66. <bochs:14> m
  67. :14: syntax error at 'm'
  68. <bochs:15> n
  69. Next at t=2020966107
  70. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  71. <bochs:16> o
  72. :16: syntax error at 'o'
  73. <bochs:17> p
  74. Next at t=2020966108
  75. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  76. <bochs:18> q
  77. (0).[2020966108] [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  78. (q会退出)
  79. <bochs:1> r
  80. eax: 0x00000000 0
  81. ebx: 0x00000000 0
  82. ecx: 0x00000000 0
  83. edx: 0x00000000 0
  84. esp: 0x00000000 0
  85. ebp: 0x00000000 0
  86. esi: 0x00000000 0
  87. edi: 0x00000000 0
  88. eip: 0x0000fff0
  89. eflags 0x00000002: id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf
  90. <bochs:2> s
  91. Next at t=1
  92. (0) [0x0000000fe05b] f000:e05b (unk. ctxt): xor ax, ax                ; 31c0
  93. <bochs:3> u
  94. 000fe05b: (                    ): xor ax, ax                ; 31c0
  95. <bochs:4> v
  96. :4: syntax error at 'v'
  97. <bochs:5> w
  98. :5: syntax error at 'w'
  99. <bochs:6> x
  100. [bochs]:
  101. 0x00000000 <bogus+       0>:        0x00000000
  102. <bochs:7> y
  103. :7: syntax error at 'y'
  104. <bochs:8> z
  105. :8: syntax error at 'z'
  106. <bochs:9>
复制代码

10个有效字母为命令
  1. 1--2--3--4--5--6--7--8--9--10
  2. b,c,h,n,p,q,r,s,u,x,


  3. <bochs:3> b
  4. Error: pbreak of this kind not implemented yet.

  5. <bochs:4> c

  6. ^CNext at t=2020966106
  7. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe

  8. <bochs:9> h
  9. h|help - show list of debugger commands
  10. h|help command - show short command description
  11. -*- Debugger control -*-
  12.     help, q|quit|exit, set, instrument, show, trace, trace-reg,
  13.     trace-mem, u|disasm, ldsym, slist
  14. -*- Execution control -*-
  15.     c|cont|continue, s|step, p|n|next, modebp, vmexitbp
  16. -*- Breakpoint management -*-
  17.     vb|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,
  18.     bpe, bpd, d|del|delete, watch, unwatch
  19. -*- CPU and memory contents -*-
  20.     x, xp, setpmem, writemem, crc, info,
  21.     r|reg|regs|registers, fp|fpu, mmx, sse, sreg, dreg, creg,
  22.     page, set, ptime, print-stack, ?|calc
  23. -*- Working with bochs param tree -*-
  24.     show "param", restore

  25. <bochs:15> n
  26. Next at t=2020966107
  27. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe

  28. <bochs:17> p
  29. Next at t=2020966108
  30. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe

  31. <bochs:18> q
  32. (0).[2020966108] [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  33. (q会退出)

  34. <bochs:1> r
  35. eax: 0x00000000 0
  36. ebx: 0x00000000 0
  37. ecx: 0x00000000 0
  38. edx: 0x00000000 0
  39. esp: 0x00000000 0
  40. ebp: 0x00000000 0
  41. esi: 0x00000000 0
  42. edi: 0x00000000 0
  43. eip: 0x0000fff0
  44. eflags 0x00000002: id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf

  45. <bochs:2> s
  46. Next at t=1
  47. (0) [0x0000000fe05b] f000:e05b (unk. ctxt): xor ax, ax                ; 31c0

  48. <bochs:3> u
  49. 000fe05b: (                    ): xor ax, ax                ; 31c0

  50. <bochs:6> x
  51. [bochs]:
  52. 0x00000000 <bogus+       0>:        0x00000000
复制代码
 楼主| 发表于 2026-5-14 11:17:02 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-5-19 13:02 编辑

qemu的grub
认识,理解,混熟grub

  1. 在QEMU虚拟机里折腾GRUB,是学习它工作原理和故障修复的最佳方式。你可以按照“搭建实验室 → 制造故障 → 动手修复”的步骤进行,整个过程
  2. 都在一个与主系统隔离的安全环境里,可以放心大胆地试。

  3. ### 🛠️ 第一步:搭建你的 GRUB 实验环境

  4. 我们先动手创建一个虚拟机,并完成GRUB的初始安装。

  5. 1.  **创建虚拟磁盘**:打开终端,运行以下命令创建一个100MB的空白磁盘镜像文件。
  6.     ```bash
  7.     dd if=/dev/zero of=grub_test.img bs=512 count=204800
  8.     ```
  9.     *这个命令会生成一个名为 `grub_test.img` 的文件,大小正好是 `204800 * 512` 字节,即100MB。*

  10. 2.  **准备分区**:把它当作一块真正的硬盘来操作。
  11.     ```bash
  12.     # 1. 对虚拟磁盘进行分区。这里使用老式的dos分区表。
  13.     fdisk grub_test.img << EOF
  14.     o
  15.     n
  16.     p
  17.     1
  18.    
  19.    
  20.     w
  21.     EOF

  22.     # 2. 计算第一个分区的偏移量并挂载。下面例子假设分区从扇区63开始,偏移量为 63*512=32256 字节。
  23.     sudo losetup -o 32256 /dev/loop0 grub_test.img

  24.     # 3. 格式化为 ext4 文件系统,并挂载到 /mnt 目录。
  25.     sudo mkfs.ext4 /dev/loop0
  26.     sudo mount /dev/loop0 /mnt
  27.     ```

  28. 3.  **安装 GRUB**:这一步会在虚拟磁盘上写入引导代码。
  29.     ```bash
  30.     sudo grub-install --boot-directory=/mnt --target=i386-pc --modules="part_msdos" grub_test.img
  31.     ```

  32. 4.  **创建 GRUB 配置文件**:在 `/mnt/grub/grub.cfg` 中创建一个最简单的菜单。
  33.     ```bash
  34.     sudo tee /mnt/grub/grub.cfg << EOF
  35.     set timeout=5
  36.     set default=0

  37.     menuentry "我的实验系统" {
  38.         echo "正在启动实验系统..."
  39.         # 这里先放一个假的启动项,后面会替换
  40.         # multiboot (hd0,msdos1)/boot/mykernel
  41.         # boot
  42.     }
  43.     EOF
  44.     ```

  45. 5.  **清理并启动**:将所有改动写回磁盘并卸载,然后启动虚拟机。
  46.     ```bash
  47.     sudo umount /mnt
  48.     sudo losetup -d /dev/loop0
  49.     ```
  50.     至此,一个包含GRUB引导程序的虚拟磁盘就准备好了。你可以使用以下命令启动它:
  51.     ```bash
  52.     qemu-system-x86_64 -hda grub_test.img -m 1024
  53.     ```
  54.     启动后,你应该能看到 GRUB 的启动菜单,虽然它现在还不能启动一个完整的操作系统,但这正是我们实验的起点。

  55. ### 💥 第二步:模拟核心故障

  56. 现在环境准备好了,我们可以人为制造一些常见故障,来模拟真实世界中可能遇到的问题。

  57. | 故障类型 | 模拟方法 | 预期现象 |
  58. | :--- | :--- | :--- |
  59. | **配置文件丢失 (最常见)** | 进入虚拟机系统,删除GRUB配置文件。或者,你也可以不创建`grub.cfg`文件就进行安装。 | 系统启动后,GRUB找不到
  60. 菜单文件,会直接进入一个 **`grub rescue>`** 救援模式。`ls`命令的输出会很少。 |
  61. | **核心文件损坏或缺失** | 在已经创建了`grub.cfg`的系统中,故意修改或删除`menuentry`中指定的内核文件。 | GRUB可以正常显示菜单,但当你选择
  62. 菜单项后,会提示找不到内核或报错,无法完成启动。 |
  63. | **引导代码损坏** | 使用`dd`命令覆盖虚拟磁盘的**开头部分**(即主引导记录MBR),模拟被Windows或其他系统覆盖的情况。 | 系统启动后,可能
  64. 直接黑屏,或者出现一个孤零零的 **`GRUB>`** 提示符,或者根本没有GRUB的痕迹。 |

  65. ### 🔧 第三步:动手修复故障

  66. 根据上面模拟的故障类型,下面是相应的修复方法。

  67. #### 场景一:修复 `grub rescue>` 救援模式 (配置文件丢失)

  68. 当屏幕上出现 `grub rescue>` 提示符时,别慌,这恰恰是最好的学习机会。

  69. 1.  **查看设备**:输入 `ls`,你会看到类似 `(hd0) (hd0,msdos1)` 的输出。`(hd0,msdos1)` 就是你的Linux系统分区。
  70. 2.  **寻找GRUB文件**:手动设置GRUB的根目录和模块路径,加载必要模块。
  71.     ```bash
  72.     grub rescue> set prefix=(hd0,msdos1)/grub
  73.     grub rescue> insmod normal
  74.     grub rescue> normal
  75.     ```
  76.     执行 `normal` 后,成功的话,你会看到一个功能更强大的 **`grub>`** 提示符。
  77. 3.  **进入系统并修复**:在 `grub>` 提示符下,手动引导进入系统。
  78.     ```bash
  79.     grub> set root=(hd0,msdos1)
  80.     grub> linux /boot/vmlinuz-xxx root=/dev/sda1  # 注意:文件名需按Tab补全
  81.     grub> initrd /boot/initrd.img-xxx
  82.     grub> boot
  83.     ```
  84.     进入系统后,你就可以用 `sudo update-grub` (或 `sudo grub-mkconfig -o /boot/grub/grub.cfg`) 重新生成配置文件了。

  85. #### 场景二:使用 Live CD 进行高级修复

  86. 如果GRUB损坏严重,连`grub rescue>`都无法正常工作,或者你无法进入系统,就需要用到
  87. “终极武器”——**使用Linux Live CD(急救盘)进行Chroot修复**。

  88. 1.  **挂载系统**:
  89.     ```bash
  90.     # 挂载系统分区和虚拟文件系统
  91.     sudo mount /dev/sda1 /mnt
  92.     sudo mount --bind /dev /mnt/dev
  93.     sudo mount --bind /proc /mnt/proc
  94.     sudo mount --bind /sys  /mnt/sys
  95.     ```

  96. 2.  **执行Chroot**:将 `/mnt` 变为新的根目录。
  97.     ```bash
  98.     sudo chroot /mnt
  99.     ```

  100. 3.  **重新安装GRUB**:现在,你就在一个“修复后”的系统里了,可以像操作正常系统一样修复它。
  101.     ```bash
  102.     # 1. 重新安装GRUB到磁盘的主引导记录
  103.     grub-install /dev/sda

  104.     # 2. 重新生成配置文件
  105.     update-grub   # Debian/Ubuntu系
  106.     # 或 grub-mkconfig -o /boot/grub/grub.cfg  # 其他发行版

  107.     # 3. 退出chroot并重启
  108.     exit
  109.     sudo umount /mnt/dev /mnt/proc /mnt/sys /mnt
  110.     sudo reboot
  111.     ```
  112.     Chroot是Linux系统救援中最强大的工具之一,掌握它可以说是每个用户的必备技能。

  113. ### 💎 进阶挑战:编写一个“最小内核”

  114. 当手动修复变得越来越熟练后,你可以尝试更进一步:编写一个简单的程序作为内核,让GRUB来引导它。这能让你对“操作系统是如何启动的”这件事有
  115. 更深的理解。

  116. 你可以用C语言编写一个简单的函数,直接向显存 (`0xB8000`) 写入字符,输出 "Hello, GRUB!"。然后用GRUB的 `multiboot` 命令来加载它。网上有很多
  117. “从零开始写操作系统”的教程可以参考这个有趣的实践。

  118. 上面这些步骤,你可以一步步跟着在虚拟机里操作。如果在某个环节卡住了,比如 `ls` 命令看到的设备和教程里不一样,可以把现象截图发出来,我帮你
  119. 分析下一步该怎么做~
复制代码


normal正常模式

  1. 在 Linux 下使用 QEMU 安装和运行 GRUB,本质上是创建一个虚拟硬盘,然后像在真实物理机上一样,将 GRUB 引导程序安装到该
  2. 虚拟硬盘的主引导记录或 GPT 分区中。

  3. 下面是一个通用的、可直接上手的操作流程。

  4. ### 📋 准备工作

  5. 1.  **安装必要软件**:需要安装 `qemu-system-x86` (或 `qemu-kvm`)、`qemu-utils` 以及 `grub2`。
  6.     ```bash
  7.     # Debian/Ubuntu 及其衍生版
  8.     sudo apt update
  9.     sudo apt install -y qemu-system-x86 qemu-utils grub2

  10.     # Fedora/RHEL/CentOS
  11.     sudo dnf install -y qemu-system-x86 qemu-img grub2-tools
  12.     ```
  13.     > `qemu-utils` (或 `qemu-img`) 用于创建虚拟磁盘,`grub2` (或 `grub-pc-bin`) 提供了 `grub-install` 等关键工具。

  14. ### 💽 第一步:创建并挂载虚拟硬盘

  15. 1.  **创建空白虚拟硬盘文件**:使用 `qemu-img` 创建一个 100MB 的 `raw` 格式镜像文件。`raw` 格式简单,与 `dd` 等基础工具兼容性最好。
  16.     ```bash
  17.     qemu-img create -f raw hd.img 100M
  18.     ```
  19.     > 现在你有了一个名为 `hd.img` 的“空硬盘”。`raw` 格式意味着 QEMU 可以像访问真实物理硬盘一样直接访问它。

  20. 2.  **格式化并挂载**:为了让宿主机能操作这个虚拟硬盘里的文件,需要将其挂载。
  21.     ```bash
  22.     # 将镜像文件连接到空闲的回环设备 (/dev/loop0)
  23.     sudo losetup -f hd.img
  24.     # 格式化这个“硬盘”,创建 ext4 文件系统
  25.     sudo mkfs.ext4 hd.img
  26.     # 将其挂载到 /mnt 目录
  27.     sudo mount hd.img /mnt
  28.     ```
  29.     > 连接成功后,可以用 `sudo losetup -a` 命令查看设备映射关系。

  30. ### 🔧 第二步:在虚拟硬盘上安装 GRUB

  31. 这是最核心的一步。**关键在于 `grub-install` 的目标设备是第一步中映射到的回环设备** (如 `/dev/loop0`),而不是镜像文件本身。

  32. ```bash
  33. # 安装 GRUB 到虚拟硬盘,假设回环设备是 /dev/loop0
  34. sudo grub-install --boot-directory=/mnt/boot --target=i386-pc --force /dev/loop0
  35. ```

  36. *   `--boot-directory=/mnt/boot`:指定 GRUB 存放引导文件的位置。
  37. *   `--target=i386-pc`:明确指定安装适用于传统 BIOS 引导的 GRUB 版本。
  38. *   `--force`:由于目标不是物理磁盘,需要此参数强制安装。
  39. *   `/dev/loop0`:**目标设备**,这是宿主机看到的“虚拟硬盘”。

  40. ### 📝 第三步:创建 GRUB 配置文件

  41. 安装完成后,GRUB 的引导文件位于 `/mnt/boot/grub/`。现在创建一个简单的菜单配置文件 `grub.cfg`,让 GRUB 启动时能显示菜单。

  42. ```bash
  43. # 创建 grub.cfg 文件
  44. sudo tee /mnt/boot/grub/grub.cfg << EOF
  45. # 设置默认启动项为第一个菜单
  46. set default=0
  47. # 设置等待时长为 5 秒
  48. set timeout=5

  49. # 定义一个菜单项,名称为 "My Custom System"
  50. menuentry "My Custom System" {
  51.     # 告知 GRUB 根分区位置,这里指第一块硬盘的第一个分区
  52.     set root='(hd0,msdos1)'
  53.     # 加载 multiboot 模块
  54.     insmod multiboot
  55.     # 加载你独立的汇编软件,这里需要你提供具体的二进制文件路径
  56.     # multiboot /boot/your_software.bin
  57.     echo "Loading your custom software..."
  58. }
  59. EOF
  60. ```
  61. > 目前 `grub.cfg` 只是一个模板,需要根据你后续放入的内核或独立软件进行定制。例如,如果你想从该虚拟硬盘启动一个 Linux 内核,
  62. 需要在此文件中使用 `linux` 和 `initrd` 命令指定内核和 initrd 镜像的路径。

  63. ### 🚀 第四步:用 QEMU 启动

  64. 现在,可以使用 QEMU 启动这台包含 GRUB 的“虚拟机”了。

  65. ```bash
  66. qemu-system-x86_64 -hda hd.img
  67. ```

  68. *   `-hda hd.img`:指定 `hd.img` 作为第一块 IDE 硬盘。
  69. *   **查看效果**:QEMU 窗口会弹出,并显示 GRUB 的启动菜单或命令行界面。

  70. > **无图形界面模式**:如果是在远程服务器或无图形界面的环境中,可以添加 `-nographic` 参数,GRUB 和系统的输出将会重定向到当前
  71. 终端。退出方式通常是先按 `Ctrl + A`,然后按 `X`。

  72. ---

  73. ### 💡 进阶用法

  74. *   **测试 ISO 文件**:如果想测试一个可启动的 ISO 镜像是否支持 GRUB 引导,可以直接将 ISO 文件作为 QEMU 的 CD-ROM 启动。
  75.     ```bash
  76.     qemu-system-x86_64 -cdrom your_bootable_image.iso
  77.     ```

  78. *   **使用 UEFI 引导**:上述步骤是针对传统 BIOS 的。若需测试 UEFI 环境,需要安装 `ovmf` 包,并指定 UEFI 固件:
  79.     ```bash
  80.     sudo apt install ovmf
  81.     qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -hda hd.img
  82.     ```

  83. *   **直接使用 GRUB 作为固件**:Debian 系提供了一个名为 `grub-firmware-qemu` 的软件包,可以生成一个专门的 GRUB 镜像,并直接
  84. 通过 `-bios grub.bin` 参数将其作为 QEMU 的固件来启动。

  85. 你可以参考这个流程创建一个虚拟盘,往里面放入你之前提到的**独立汇编软件**,然后编写 `grub.cfg` 里的 `multiboot` 命令指向它。如果
  86. 你在编写 `grub.cfg` 菜单或放置具体文件时遇到问题,随时可以再问我。
复制代码
 楼主| 发表于 2026-5-15 12:50:29 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-5-17 10:30 编辑

哈工大系统实验的linux0.11
  1. HIT-OSLab---->hit-oslab-linux-20110823.tar.gz------>oslab---->hdc-0.11.img----->image---->linux-0.11文件夹
  2. -------------------------------------------------------->oslab文件夹---->run文件---->执行run文件
  3. hdc-0.11.img里面有Image,双击打开hdc-0.11.img,复制image文件到linux-0.11文件夹,再运行run,./run,就可以了。
复制代码

实验环境的内容,实验的本体linux0.11内容,linux0.11里的结构解构部件内容,部件的内部循环内容,部件里的开关二进制种类内容。
bochsout.txt中文注释,输出信息什么的
  1. 00000000000i[     ] Bochs x86 Emulator 2.3.7                                                 # Bochs x86模拟器启动,版本2.3.7
  2. 00000000000i[     ]   Build from CVS snapshot, on June 3, 2008                              # 编译版本:2008年6月3日的CVS快照
  3. 00000000000i[     ] System configuration                                                    # 系统配置信息开始
  4. 00000000000i[     ]   processors: 1 (cores=1, HT threads=1)                                 # 处理器配置:1个CPU,1核心,1超线程
  5. 00000000000i[     ]   A20 line support: yes                                                 # A20地址线支持:已启用
  6. 00000000000i[     ]   APIC support: no                                                      # 高级可编程中断控制器支持:未启用
  7. 00000000000i[     ] CPU configuration                                                       # CPU配置信息开始
  8. 00000000000i[     ]   level: 5                                                              # CPU级别:5(相当于Pentium级别)
  9. 00000000000i[     ]   SMP support: no                                                       # 对称多处理支持:未启用
  10. 00000000000i[     ]   FPU support: yes                                                      # 浮点运算单元支持:已启用
  11. 00000000000i[     ]   MMX support: yes                                                      # MMX指令集支持:已启用
  12. 00000000000i[     ]   SSE support: no                                                       # SSE指令集支持:未启用
  13. 00000000000i[     ]   CLFLUSH support: no                                                   # CLFLUSH缓存行刷新指令支持:未启用
  14. 00000000000i[     ]   VME support: yes                                                      # 虚拟8086模式扩展支持:已启用
  15. 00000000000i[     ]   3dnow! support: no                                                    # 3DNow!指令集支持:未启用
  16. 00000000000i[     ]   PAE support: no                                                       # 物理地址扩展支持:未启用
  17. 00000000000i[     ]   PGE support: no                                                       # 页全局标志位支持:未启用
  18. 00000000000i[     ]   PSE support: yes                                                      # 页大小扩展支持:已启用
  19. 00000000000i[     ]   x86-64 support: no                                                    # x86-64位模式支持:未启用
  20. 00000000000i[     ]   SEP support: no                                                       # SYSENTER/SYSEXIT快速系统调用支持:未启用
  21. 00000000000i[     ]   MWAIT support: no                                                     # MWAIT电源管理指令支持:未启用
  22. 00000000000i[     ]   XSAVE support: no                                                     # XSAVE处理器状态保存指令支持:未启用
  23. 00000000000i[     ]   AES support: no                                                       # AES加密指令集支持:未启用
  24. 00000000000i[     ] Optimization configuration                                              # 优化配置信息开始
  25. 00000000000i[     ]   Guest2HostTLB support: no                                             # 客户机到宿主机TLB转换支持:未启用
  26. 00000000000i[     ]   RepeatSpeedups support: no                                            # 重复指令加速支持:未启用
  27. 00000000000i[     ]   Icache support: no                                                    # 指令缓存支持:未启用
  28. 00000000000i[     ]   Trace cache support: no                                               # 追踪缓存支持:未启用
  29. 00000000000i[     ]   Fast function calls: no                                               # 快速函数调用支持:未启用
  30. 00000000000i[     ] Devices configuration                                                   # 设备配置信息开始
  31. 00000000000i[     ]   ACPI support: no                                                      # 高级配置与电源接口支持:未启用
  32. 00000000000i[     ]   NE2000 support: no                                                    # NE2000网卡支持:未启用
  33. 00000000000i[     ]   PCI support: no                                                       # PCI总线支持:未启用
  34. 00000000000i[     ]   SB16 support: no                                                      # Sound Blaster 16声卡支持:未启用
  35. 00000000000i[     ]   USB support: no                                                       # 通用串行总线支持:未启用
  36. 00000000000i[     ]   VGA extension support: vbe                                            # VGA扩展支持:VBE(VESA BIOS扩展)
  37. 00000000000i[MEM0 ] allocated memory at 0xeb381010. after alignment, vector=0xeb382000      # 分配内存地址0xeb381010,对齐后为0xeb382000
  38. 00000000000i[MEM0 ] 16.00MB                                                                 # 分配16MB内存空间
  39. 00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/home/digahetudou/HIT-OSLab/oslab/bochs/BIOS-bochs-latest')  # BIOS ROM加载到地址0xfffe0000,大小131072字节
  40. 00000000000i[MEM0 ] rom at 0xc0000/39424 ('/home/digahetudou/HIT-OSLab/oslab/bochs/vgabios.bin')             # VGA BIOS加载到地址0xc0000,大小39424字节
  41. 00000000000i[CMOS ] Using local time for initial clock                                    # CMOS:使用宿主机本地时间作为初始时钟
  42. 00000000000i[CMOS ] Setting initial clock to: Sun May 17 10:20:53 2026 (time0=1778984453)  # CMOS:设置初始时间为2026年5月17日10:20:53
  43. 00000000000i[DMA  ] channel 4 used by cascade                                              # DMA控制器:通道4用于级联
  44. 00000000000i[DMA  ] channel 2 used by Floppy Drive                                         # DMA控制器:通道2用于软盘驱动器
  45. 00000000000i[FDD  ] fd0: '/home/digahetudou/HIT-OSLab/oslab/linux-0.11/Image' ro=0, h=2,t=80,spt=18  # 软驱0:镜像文件路径,可读写,磁头数2,磁道数80,每道扇区数18
  46. 00000000000i[MEM0 ] Register memory access handlers: 0x000a0000 - 0x000bffff               # 内存访问处理程序注册:0xA0000-0xBFFFF范围(VGA内存区域)
  47. 00000000000i[XGUI ] test_alloc_colors: 16 colors available out of 16 colors tried         # X图形界面:测试分配颜色,16种颜色全部可用
  48. 00000000000i[XGUI ] font 8 wide x 16 high, display depth = 24                              # X图形界面:字体宽度8像素,高度16像素,显示深度24位色
  49. 00000000000i[VGA  ] interval=300000                                                        # VGA:刷新间隔300000微秒
  50. 00000000000i[MEM0 ] Register memory access handlers: 0xe0000000 - 0xe07fffff               # 内存访问处理程序注册:0xE0000000-0xE07FFFFF范围(VBE扩展区域)
  51. 00000000000i[VGA  ] VBE Bochs Display Extension Enabled                                    # VGA:VBE Bochs显示扩展已启用
  52. 00000000000i[     ] init_mem of 'harddrv' plugin device by virtual method                  # 硬盘插件设备:通过虚拟方法初始化内存
  53. 00000000000i[     ] init_mem of 'keyboard' plugin device by virtual method                 # 键盘插件设备:通过虚拟方法初始化内存
  54. 00000000000i[     ] init_mem of 'serial' plugin device by virtual method                   # 串口插件设备:通过虚拟方法初始化内存
  55. 00000000000i[     ] init_mem of 'parallel' plugin device by virtual method                 # 并口插件设备:通过虚拟方法初始化内存
  56. 00000000000i[     ] init_mem of 'extfpuirq' plugin device by virtual method                # 扩展FPU中断插件设备:通过虚拟方法初始化内存
  57. 00000000000i[     ] init_mem of 'speaker' plugin device by virtual method                  # 扬声器插件设备:通过虚拟方法初始化内存
  58. 00000000000i[     ] init_dev of 'harddrv' plugin device by virtual method                  # 硬盘插件设备:通过虚拟方法初始化设备
  59. 00000000000i[HD   ] HD on ata0-0: '/home/digahetudou/HIT-OSLab/oslab/hdc-0.11.img' 'flat' mode  # 硬盘:挂载在ATA0-0接口,使用镜像文件hdc-0.11.img,平铺模式
  60. 00000000000i[HD   ] translation on ata0-0 set to 'none'                                    # 硬盘:ATA0-0接口的地址转换设置为'none'(无转换)
  61. 00000000000i[HD   ] Using boot sequence floppy, none, none                                 # 硬盘:启动顺序为软盘、无、无
  62. 00000000000i[HD   ] Floppy boot signature check is enabled                                 # 硬盘:软盘启动签名检查已启用
  63. 00000000000i[     ] init_dev of 'keyboard' plugin device by virtual method                 # 键盘插件设备:通过虚拟方法初始化设备
  64. 00000000000i[KBD  ] will paste characters every 1000 keyboard ticks                        # 键盘:每1000个键盘时钟滴答粘贴一次字符
  65. 00000000000i[     ] init_dev of 'serial' plugin device by virtual method                   # 串口插件设备:通过虚拟方法初始化设备
  66. 00000000000i[SER  ] com1 at 0x03f8 irq 4                                                    # 串口1:I/O端口地址0x03F8,中断请求号4
  67. 00000000000i[     ] init_dev of 'parallel' plugin device by virtual method                 # 并口插件设备:通过虚拟方法初始化设备
  68. 00000000000i[PAR  ] parallel port 1 at 0x0378 irq 7                                         # 并口1:I/O端口地址0x0378,中断请求号7
  69. 00000000000i[     ] init_dev of 'extfpuirq' plugin device by virtual method                # 扩展FPU中断插件设备:通过虚拟方法初始化设备
  70. 00000000000i[     ] init_dev of 'speaker' plugin device by virtual method                  # 扬声器插件设备:通过虚拟方法初始化设备
  71. 00000000000i[SPEAK] Failed to open /dev/console: Resource temporarily unavailable         # 扬声器:无法打开/dev/console设备,资源临时不可用(可忽略)
  72. 00000000000i[SPEAK] Deactivating beep on console                                            # 扬声器:禁用控制台蜂鸣声
  73. 00000000000i[     ] register state of 'harddrv' plugin device by virtual method            # 硬盘插件设备:通过虚拟方法注册状态
  74. 00000000000i[     ] register state of 'keyboard' plugin device by virtual method           # 键盘插件设备:通过虚拟方法注册状态
  75. 00000000000i[     ] register state of 'serial' plugin device by virtual method             # 串口插件设备:通过虚拟方法注册状态
  76. 00000000000i[     ] register state of 'parallel' plugin device by virtual method           # 并口插件设备:通过虚拟方法注册状态
  77. 00000000000i[     ] register state of 'extfpuirq' plugin device by virtual method          # 扩展FPU中断插件设备:通过虚拟方法注册状态
  78. 00000000000i[     ] register state of 'speaker' plugin device by virtual method            # 扬声器插件设备:通过虚拟方法注册状态
  79. 00000000000i[SYS  ] bx_pc_system_c::Reset(HARDWARE) called                                 # 系统:硬件复位函数被调用
  80. 00000000000i[CPU  ] cpu hardware reset                                                      # CPU:CPU硬件复位
  81. 00000000000i[     ] reset of 'harddrv' plugin device by virtual method                     # 硬盘插件设备:通过虚拟方法复位
  82. 00000000000i[     ] reset of 'keyboard' plugin device by virtual method                    # 键盘插件设备:通过虚拟方法复位
  83. 00000000000i[     ] reset of 'serial' plugin device by virtual method                      # 串口插件设备:通过虚拟方法复位
  84. 00000000000i[     ] reset of 'parallel' plugin device by virtual method                    # 并口插件设备:通过虚拟方法复位
  85. 00000000000i[     ] reset of 'extfpuirq' plugin device by virtual method                   # 扩展FPU中断插件设备:通过虚拟方法复位
  86. 00000000000i[     ] reset of 'speaker' plugin device by virtual method                     # 扬声器插件设备:通过虚拟方法复位
  87. 00000000000i[XGUI ] [x] Mouse off                                                           # X图形界面:鼠标已关闭
  88. 00000003445i[BIOS ] $Revision: 1.194 $ $Date: 2007/12/23 19:46:27 $                        # BIOS:版本修订号1.194,编译日期2007年12月23日
  89. 00000317668i[KBD  ] reset-disable command received                                          # 键盘:收到复位禁用命令
  90. 00000336412i[BIOS ] Starting rombios32                                                      # BIOS:开始rombios32初始化(32位BIOS扩展)
  91. 00000337108i[BIOS ] ram_size=0x00f00000                                                     # BIOS:检测到内存大小为0x00F00000(约15MB)
  92. 00000337622i[BIOS ] Found 1 cpu(s)                                                          # BIOS:找到1个CPU
  93. 00000562120i[VBIOS] VGABios $Id: vgabios.c,v 1.66 2006/07/10 07:47:51 vruppert Exp $      # VGA BIOS:版本信息,vgabios.c文件1.66版
  94. 00000562191i[VGA  ] VBE known Display Interface b0c0                                        # VGA:已知的VBE显示接口b0c0
  95. 00000562223i[VGA  ] VBE known Display Interface b0c4                                        # VGA:已知的VBE显示接口b0c4
  96. 00000565148i[VBIOS] VBE Bios $Id: vbe.c,v 1.58 2006/08/19 09:39:43 vruppert Exp $         # VBE BIOS:版本信息,vbe.c文件1.58版
  97. 00000888612i[BIOS ] ata0-0: PCHS=204/16/38 translation=none LCHS=204/16/38                 # BIOS:ATA0-0硬盘参数,物理C/H/S=204/16/38,无转换,逻辑C/H/S=204/16/38
  98. 00001200000i[XGUI ] charmap update. Font Height is 16                                       # X图形界面:字符映射更新,字体高度16像素
  99. 00004768797i[BIOS ] IDE time out                                                            # BIOS:IDE硬盘检测超时(正常现象)
  100. 00004967660i[BIOS ] Booting from 0000:7c00                                                  # BIOS:【关键】开始从内存地址0000:7C00启动(引导扇区位置)
  101. 00016198163i[FDD  ] partial read() on floppy image returns 161/512                         # 软驱:部分读取成功,返回161字节(共512字节)
  102. 00016243118i[FDD  ] read() on floppy image returns 0                                        # 软驱:【错误】读取软盘镜像返回0字节(读取失败)
  103. 00016289318i[FDD  ] read() on floppy image returns 0                                        # 软驱:读取失败,返回0字节
  104. ............若干读取失败...........
  105. 00022413168i[FDD  ] read() on floppy image returns 0                                        # 软驱:读取失败,返回0字节
  106. 00022463638i[BIOS ] int13_harddisk: function 15, unmapped device for ELDL=81               # BIOS:硬盘中断调用,功能15,设备ELDL=81未映射(第二个硬盘不存在)
  107. 00055200000p[XGUI ] >>PANIC<< POWER button turned off.                                      # X图形界面:【致命错误】电源按钮被关闭,系统崩溃
  108. 00055200000i[CPU  ] CPU is in protected mode (active)                                      # CPU:当前处于保护模式(活跃状态)
  109. 00055200000i[CPU  ] CS.d_b = 32 bit                                                         # CPU:代码段默认为32位
  110. 00055200000i[CPU  ] SS.d_b = 32 bit                                                         # CPU:堆栈段默认为32位
  111. 00055200000i[CPU  ] | EAX=0001b140  EBX=00000005  ECX=0001c248  EDX=00000020              # CPU:寄存器EAX、EBX、ECX、EDX的值
  112. 00055200000i[CPU  ] | ESP=0001c0f8  EBP=00021e6c  ESI=00000002  EDI=00000001              # CPU:寄存器ESP(堆栈指针)、EBP(基址指针)、ESI、EDI的值
  113. 00055200000i[CPU  ] | IOPL=0 id vip vif ac vm rf nt of df IF tf sf ZF af PF cf           # CPU:标志寄存器状态(IOPL=0,中断标志IF=1等)
  114. 00055200000i[CPU  ] | SEG selector     base    limit G D                                  # CPU:段寄存器信息表头
  115. 00055200000i[CPU  ] | SEG sltr(index|ti|rpl)     base    limit G D                        # CPU:段寄存器详细信息格式
  116. 00055200000i[CPU  ] |  CS:0008( 0001| 0|  0) 00000000 00000fff 1 1                        # CPU:代码段,选择子0x0008,基址0,限制0x0FFF,G=1(粒度4KB),D=1(32位)
  117. 00055200000i[CPU  ] |  DS:0010( 0002| 0|  0) 00000000 00000fff 1 1                        # CPU:数据段,选择子0x0010,基址0,限制0x0FFF,G=1,D=1
  118. 00055200000i[CPU  ] |  SS:0010( 0002| 0|  0) 00000000 00000fff 1 1                        # CPU:堆栈段,选择子0x0010,基址0,限制0x0FFF,G=1,D=1
  119. 00055200000i[CPU  ] |  ES:0010( 0002| 0|  0) 00000000 00000fff 1 1                        # CPU:附加段,选择子0x0010,基址0,限制0x0FFF,G=1,D=1
  120. 00055200000i[CPU  ] |  FS:0017( 0002| 1|  3) 00000000 0000009f 1 1                        # CPU:附加段FS,选择子0x0017,基址0,限制0x009F,G=1,D=1
  121. 00055200000i[CPU  ] |  GS:0017( 0002| 1|  3) 00000000 0000009f 1 1                        # CPU:附加段GS,选择子0x0017,基址0,限制0x009F,G=1,D=1
  122. 00055200000i[CPU  ] | EIP=00006ac0 (00006ac0)                                              # CPU:指令指针寄存器EIP的值0x00006AC0
  123. 00055200000i[CPU  ] | CR0=0x8000001b CR1=0 CR2=0x08032ef0                                  # CPU:控制寄存器CR0=0x8000001B(保护模式已启用),CR1=0,CR2=0x08032EF0(页错误线性地址)
  124. 00055200000i[CPU  ] | CR3=0x00000000 CR4=0x00000000                                        # CPU:控制寄存器CR3=0(页目录基址),CR4=0
  125. 00055200000i[CPU  ] >> sub ecx, 0x00000004 : 83E904                                        # CPU:最后执行的指令,SUB ECX,4(ECX寄存器减4)
  126. 00055200000i[CMOS ] Last time is 1778984466 (Sun May 17 10:21:06 2026)                     # CMOS:最后一次记录的时间,2026年5月17日10:21:06
  127. 00055200000i[XGUI ] Exit                                                                   # X图形界面:退出
  128. 00055200000i[     ] restoring default signal behavior                                      # 系统:恢复默认信号处理行为
  129. 00055200000i[CTRL ] quit_sim called with exit code 1                                       # 控制器:quit_sim函数被调用,退出代码1(非正常退出)
复制代码
 楼主| 发表于 5 天前 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-6-12 10:57 编辑

建立123字符内容的1.bin,输出bin二进制为01字符的1.txt文本
  1. 方法一:使用 /dev/urandom 生成随机数据(Linux/macOS)
  2. 这是最标准的方法,生成真正的随机二进制数据。
  3. head -c 123 /dev/urandom > 1.bin
复制代码
  1. 将二进制文件(.bin)转换为包含 0 和 1 字符的文本文件,本质上是将每个字节拆解为 8 个比特位。
  2. 以下是几种常用且可靠的方法,按适用场景排序:
  3. 方法一:使用 xxd 命令(Linux/macOS,最简洁)
  4. xxd 是处理二进制转储的标准工具,其 -b 参数可直接输出二进制形式。
  5. xxd -b 1.bin | cut -d' ' -f2-7 | tr -d ' ' > 1.txt
  6.     原理:xxd -b 每行输出偏移量、8位二进制(每4位空格分隔)、ASCII字符。用 cut 提取二进制列,
  7. tr -d 删除空格,即可得到连续的01串。
  8.     无空格每行长度:原始 xxd -b 每行输出 6 组(即 48 位),上述命令会删掉所有空格形成一行。
  9. 如果希望保持每行固定位数,可略过 tr 部分,得到空格分隔的形式。
复制代码

1.txt显示
  1. 010110001001101111000000011101001010111001001101
  2. 010101001000010111010111111010011000010111110101
  3. 111011001100001011001110001000011010011000010101
  4. 000110110111010101101001111100111010000111010101
  5. 110110111111000001101010010001110011001000100010
  6. 000011011101101100000111000111001010010001011101
  7. 001000100010011100010100110111100100000001111100
  8. 000010111100100100111111100001101000001000101111
  9. 100011010110000011100111000011011101110100100111
  10. 000101100100001110011111001010001010000100111000
  11. 110010101011111110010001000000000000010110111111
  12. 001011110110100000001101000001000101000001010000
  13. 111010001011000101010101101101101101000001111010
  14. 001010000100110111010000110100101100011111011000
  15. 111110111101000011101101011011110111010101110010
  16. 110011010110010010111100110110110011100100010010
  17. 111101101011110001110000100111011101111010110011
  18. 111100000011100111000011111010010100010011110110
  19. 110100110111100101010110001000111111000100010010
  20. 001010101010100010011111000011101100001111110110
  21. 101110110000100000000101
复制代码

需要一个文本程序,将储存取的地址关联信息线路序数,在前面展开,后面对应的字符内容,匹配比较选择字符内容,去开关程序组织机器的整机,部件,零件。(xxd和debug.exe的信息模式)从计数器概念1进制基础,二进制,多进制,到if匹配正则比较选择,中外多种字符集单元书法文字的程序语法和习俗通俗语法。
 楼主| 发表于 4 天前 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-6-14 11:02 编辑

行业内模拟 PDP-11 的标准工具是 SIMH。
    核心项目:SIMH。这是一个历史悠久的模拟器框架,功能非常强大,包含了针对 PDP-11 各型号(包括 11/40)的精确模拟器
。它能够运行 PDP-11 上的各种操作系统,如早期 UNIX 版本(V5, V6, V7)、RSX-11、RT-11 等。其网络设备模拟也很成熟,支持通过 NAT 等方式连接外部网络。

其他选项:根据一份 PDP-11 模拟器的对比资料,还有 Ersatz、Supnik 1.0 等模拟器也支持 PDP-11/40 或非常接近的型号。其中 Ersatz 支持 PDP-11/34A、11/35、11/40。另一个名为 sam11 的项目也专注于 PDP-11/40 模拟,尤其适合在微控制器上运行。
性能参考:在一份较老的对比数据中,SIMH (当时叫 Supnik 1.0) 模拟 PDP-11/45 启动 2.9BSD 系统的速度表现不错,而 SIMH 的现代版本性能会更好。

安装 SIMH:直接使用 apt install 命令进行安装。
  1. sudo apt install simh
复制代码


安装完成后,可以通过以下方式验证是否成功并启动 PDP-11 模拟器。
查看版本信息:在终端中输入以下命令,如果能看到版本信息,则说明安装成功。
pdp11

  1. pdp11
  2. PDP-11 simulator V3.8-1
  3. sim>
复制代码

下载系统,选择RT系列1~11
  1. http://pdp-11.classiccmp.org//RT-11/dists/
  2. rtv53swre.tar.Z
  3. 解压为Disks+Licenses两个文件夹,
  4. Disks文件夹里有rtv53_rl.dsk文件
复制代码

好像是要三个文件,一个文件作为打印机输出屏幕显示功能,一个是空白安装盘=硬盘样子,一个就是这个下载的rtv53_rl.dsk。(实际好像没有运行到打印输出那个文件的步子)
先运行再说,其余两个文件先不管,反复多重复安装几遍。
  1. sim> detach rl0
  2. sim> attach rl0 rtv53_rl.dsk
  3. sim> set rl0 rl02
  4. sim> set rl0 writeenabled
  5. sim> boot rl
复制代码
进入安装程序,多数都是间隔的按回车键提示下一步,
  1. ZA[c\
  2.         Welcome to RT-11 V5.3

  3.         You have bootstrapped the RT-11 Distribution Disk.  Use this disk to
  4.         install your RT-11 system, then store it in a safe place.

  5.         RT-11  V5.3  provides an automatic installation procedure which will
  6.         back up your distribution disk and build a working system disk which
  7.         should  be  used for your work with RT-11.
  8.         This  working  system disk will only  contain  the  RT-11  operating
  9.         system.  After  the  RT-11  installation  is  complete,  follow  the
  10.         installation instructions  packaged  with  any optional languages or
  11.         utility software which you will be using.


  12.         Press the "RETURN" key when ready to continue.
  13. 方案二:用 rtv53_rl.dsk 重新安装到新的工作盘(推荐)

  14. 既然你现在能启动发行版,正好用它来创建一个真正可用的工作盘。

  15. 当前你已经在安装欢迎界面了,按回车继续,按照之前的步骤:

  16.     按回车

  17.     输入 YES

  18.     输入日期(如 16-OCT-94)

  19.     在 Mount a blank disk in DL0 提示时,按 Ctrl+E 返回 sim>

  20.     挂载一个空白盘作为 rl0(可以用 rl02.dsk 或新建的)

  21.     输入 c(continue)继续安装

  22.     后续步骤中,当询问是否退出时,回答 N
  23. 前面主要重复安装会用到的就是yes和日期两个输入。
  24. 其中日期随便写的,按照给定的复写就可以。
  25. 最后要出现linux下执行文件都会出现的小不点./,单独一个点.
  26. 这时就是进入什么运行正常的状态。
复制代码
乱七八糟的,没搞懂流程。
 楼主| 发表于 前天 10:28 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-6-14 21:30 编辑

8086tiny
  1. https://github.com/adriancable/8086tiny
复制代码
点击code > 下载zip,8086tiny_103.tar.bz2解压,找runme文件
终端输入执行./runme
  1. FreeDOS kernel - SVN (build 2040 OEM:0xfd) [compiled Apr  7 2012]
  2. Kernel compatibility 7.10 - WATCOMC - FAT32 support

  3. (C) Copyright 1995-2011 Pasquale J. Villani and The FreeDOS Project.
  4. All Rights Reserved. This is free software and comes with ABSOLUTELY NO
  5. WARRANTY; you can redistribute it and/or modify it under the terms of the
  6. GNU General Public License as published by the Free Software Foundation;
  7. either version 2, or (at your option) any later version.
  8. - InitDiskno hard disks detected
  9.                                                                               
  10. FreeCom version 0.82 pl 3 XMS_Swap [Dec 10 2003 06:49:21]


  11. type HELP to get support on commands and navigation

  12. A:\>ls
  13. Bad command or filename - "LS".

  14. A:\>dir
  15. Volume in drive A is FREEDOS1
  16. Volume Serial Number is 4559-120D
  17. Directory of A:\

  18. KERNEL   SYS        45,450  04-07-2012  8:13a
  19. COMMAND  COM        66,090  12-10-2003  7:49a
  20. CONFIG   SYS           734  02-13-2014  9:06p
  21. AUTOEXEC BAT           894  01-19-2014  2:04a
  22. FREEDOS              <DIR>  10-07-2006 10:56a
  23. APPINFO  TGZ        11,021  10-11-2006  3:00p
  24. QUITEMU  COM             5  06-19-2013  4:35p
  25. ALLEYCAT EXE        55,067  08-26-1998  2:52p
  26.          7 file(s)        179,261 bytes
  27.          1 dir(s)          57,344 bytes free

  28. A:\>
复制代码

居然这样走到了freedos
 楼主| 发表于 前天 11:25 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-6-14 21:32 编辑

用gdb的图形观察,类似win微软下的emu8086,汇编关联进制数据。
  1. gdb ./编译后可执行的文件名
  2. (gdb) layout asm   # 打开汇编窗口
  3. (gdb) starti       # 在第一条指令处停下
  4. (gdb) si           # 单步执行一条汇编指令 (step instruction)
复制代码

as1.asm代码

  1. .section .data
  2.     msg: .ascii "haha!\n"
  3.     msg_len = . - msg

  4. .section .text
  5.     .global _start

  6. _start:
  7.     # write(1, msg, msg_len)
  8.     mov $1, %rax          # sys_write
  9.     mov $1, %rdi          # fd = stdout
  10.     mov $msg, %rsi        # buffer
  11.     mov $msg_len, %rdx    # count
  12.     syscall

  13.     # exit(0)
  14.     mov $60, %rax         # sys_exit
  15.     mov $0, %rdi          # status
  16.     syscall
复制代码

linux终端里gdb执行
  1. gdb ./as1
  2. (gdb) layout asm   # 打开汇编窗口
复制代码
没办法鼠标复制了。好像还是缺一点,需要有一个整体棋局一样的棋盘容器,在容器里,在公园里游玩一样。(游戏世界里编程)

cutter
  1. 下载 AppImage 文件
  2.     打开浏览器,直接访问 Cutter 的 GitHub Releases 页面:https://github.com/rizinorg/cutter/releases
  3.     在页面中找到最新的版本(例如 2.4.1)
  4.     下载文件名类似 Cutter-vX.X.x-x86_64.AppImage 的文件(注意是 x86_64.AppImage 结尾的)

  5. 2. 赋予执行权限并运行
  6. 打开终端,进入下载目录,执行:
  7. chmod +x Cutter-*.AppImage
  8. ./Cutter-*.AppImage
复制代码
下载 Cutter-v2.4.1-Linux-x86_64.AppImage
按照启动程序的提示,选择as1文件,其后有信息阵列,加载选项往右拉到高级点点点选项。上面有三角形运行图标按钮,点击运行。左边entry0的信息里点击鼠标,右边有信息出来。在文件眉头选项里的窗口栏,可选择16进制。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-6-16 21:28

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表